潔くキッズケータイを買えばいいのに。
娘に持たせる最初のスマホは?
スマホなんて家に何台も転がってるこのご時世、わざわざキッズケータイを買わなくてもなんとかなるのでは?と思ってしまった父です。
ただ、フツーのスマホをそのまま子供に持たせてしまうと、いろんなアプリにアクセスができてしまい、色々と良くないことが起こりそうで不安な訳です。
そこで、今回は家に転がってたRakuten mini向けにホームアプリ(いわゆるランチャーアプリ)を作成して、必要な機能だけをかんたんに実行できるようにしてみました。
作ったもの
こんな感じのアプリです。
ホームアプリとして実装しているため、ホームボタンを押すたびにこの画面が表示される感じになっています。ポイントは…
- 画面要素は時計とボタン4つだけ
- ボタンを押すと、父・母に電話、カメラの起動、ファイラーアプリ(Files)の起動が行える
- ボタンは誤動作防止のため長押ししないと動作しない
- それ以外のアプリや画面は(なるべく)起動できないようになっている
こんな感じです。
実際のコード
Githubで公開しています。
ポイントは…
- Manifestで
android:screenOrientation="portrait"
と宣言して画面は縦固定とする <category android:name="android.intent.category.LAUNCHER" />
と記載することでホームアプリとして動作するようにする
<activity android:screenOrientation="portrait" android:name=".MainActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> <category android:name="android.intent.category.HOME" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
そして、メインのロジックとしては
setOnClickListener()
ではなくsetOnLongClickListener()
を使って長押しイベントを検知Intent.ACTION_CALL
で直接電話発信を実施(要android.permission.CALL_PHONE
権限、しかもRunTimePermissionが必要)
father.setOnLongClickListener(View.OnLongClickListener { val uri = Uri.parse("tel:08000000000") val intent = Intent(Intent.ACTION_CALL, uri) startActivity(intent) return@OnLongClickListener true })
- 起動するアプリはRakuten miniにプリインされているカメラアプリとFilesアプリを直打ち
val intent = packageManager.getLaunchIntentForPackage("com.myos.camera") startActivity(intent)
val intent = packageManager.getLaunchIntentForPackage("com.google.android.apps.nbu.files") startActivity(intent)
こんな感じです。かなりRakuten miniに全振りしてるので、決め打ちで値を入れているところも多いですが、他の端末でも似たようなことができるはずです。