つくったもの
聞いた話だと、世の中には「みまもり端末」とかいって月額いくらとかかかるサービスもあるようだ。
— Yusuke Iwaki (@yi01imagination) 2023年5月9日
でも、rakuten miniを中古で2000円ちょいで手に入れたらAndroid Management APIをちょちょいとやって実現できるよね?
実際買ってやってみたけど、これで十分みまもりできそうよ? pic.twitter.com/4RKqkxaCOP
- 学校にいるであろう時間帯は、アプリが何も使えない時計状態
- でも親が本当に連絡を取りたいときに、電話はかかる(時計状態でも、着信画面は出る)
- 動作確認してないが、たぶん地震速報とかそれ系もくる
- スマホ使っていいよって時間帯は、限られたアプリだけ起動できる。
これなら「スマートフォン持ち込みなんて許さん、けど、みまもり端末に限って持ち込んでいいぞ」てきな学校を攻略できるんでは?そういう需要ありそうでは??
とか妄想してみたのであった。
つくりかた
- 楽天ミニの中古デバイス
- eSIM
- 特定のアプリだけを表示するランチャーアプリ(自作する)
- ManagedConfigurationを使って「お家モード」「学校モード」の切り替えができるように作るのがミソ
があればできる。
ランチャーアプリを作る
ランチャーと言っても、今回のユースケースでは任意のアプリを起動できる必要はない。
固定でアプリアイコンを配置してしまって、そのアイコンが押されたら特定のアプリ決め打ちでIntentを投げるだけのウルトラ適当実装で十分だ。
あとは、「お家モード」「学校モード」の2つのFragmentが切り替わるだけの1Activityのアプリを作ればいい。
ふつうにアプリを作る上ではあまり馴染みがないであろうRestrictionsManagerという機能を使い、MDMから流し込むことができる設定を定義・設定値の取得を行う。
Android Management APIでポリシーを作る
今回のアプリはAndroidデバイス管理機能のKIOSKモードで動かす。(POSレジアプリとかでよく使われてるやつ)
ただ、大抵のMDMサービスを契約すると手間もお金もかかるので、簡易的なMDMサービスを自分で作ってしまうのがいいだろう。作り方は去年のアドベントカレンダーに結構細かく書いている。興味ある人は読んでくれ。
で、MDMを作ってどういうポリシーを用意すればいいかというと、こんな感じ。「お家モード用のポリシー」「学校モード用のポリシー」の2つを用意し、お家モードで起動したいアプリは両方のポリシーにFORCE_INSTALLED指定で入れておく。
先の手順で作ったランチャーアプリはprivate appsとしてAndroid Management APIに登録し、以下のようにManaged Configurationを指定してインストール+KIOSKモードにする。
「お家モード用のポリシー」↓
"applications": [ { "packageName": "com.google.android.apps.maps", "installType": "FORCE_INSTALLED" }, { "packageName": "com.google.android.apps.tachyon", "installType": "FORCE_INSTALLED" }, { "packageName": "com.android.chrome", "installType": "FORCE_INSTALLED" }, { "packageName": "dev.yusukeiwaki.mylauncher", "installType": "KIOSK", "managedConfiguration": { "mode": "home" } } ],
学校モードはmodeをschoolにしただけ。
"packageName": "dev.yusukeiwaki.mylauncher", "installType": "KIOSK", "managedConfiguration": { "mode": "school" } }
あとは、適当な時間帯で、Android Management APIを叩いてポリシーを当てるようにすればいいだけ。IoTスイッチ的なものでポチッとできるようにするとさらに素敵かもしれない。
まとめ
Android Management APIがあれば専用端末作り放題で楽しい。
Rakuten miniは安くてコスパ最高