過去に書いたPackageInstaller.sessionによるサイレントインストール(ユーザ操作不要のバックグラウンドインストール)が、AndroidMからDevicePolicyManagerで利用できるようになった。ただし、利用するにはDeviceOwnerである必要がある。
Silent install and uninstall of apps by Device Owner: A Device Owner can now >silently install and uninstall applications using the PackageInstaller
DeviceAdmin
AndroidではいわゆるMDM機能の実現のためにDeviceAdminという概念が存在する。
DeviceAdminの権限では端末のリモートワイプや強制ロック、カメラ等のデバイス利用制限が実行でき、
標準ではAndroidDeviceManagerというアプリがインストールされている。
これは設定>セキュリティ>端末管理アプリから確認可能であり、ここでチェックを入れるとそのアプリがDeviceAdminアプリになる。
DeviceAdminアプリのつくりかたは他に譲るとして、ここではDeviceOwnerの説明をする。
DeviceOwner
DeviceOwnerは、特権DeviceAdminとでもいうべき存在で、DeviceAdminよりも多くの、そして強力な端末操作APIが利用できる。その一つがサイレントインストールなのだ。
ただし、DeviceAdminが一端末に複数存在しうるのに対し、DeviceOwnerは端末に一アプリのみが許されている模様。
(DeviceOwnerと似た概念でProfileOwnerというものも存在するが、ここでは割愛する)
DeviceOwnerになるためには、端末初回起動時にAndroidBeamによるプロビジョニング作業が必要であり、いまのところ一般ユースではほとんど関係なさそうである。
(今後各キャリアプリインされれば関係するかもしれない)
方法は気が向いたら別途ポストする。
開発時は以下のdpmコマンドを利用することで可能。
ComponentNameにはインストール済みのDeviceAdminのコンポーネント名を入れる。
このとき、端末にGoogleアカウントなどのアカウントが登録されていると失敗するので要注意。
adb shell dpm set-device-owner <ComponentName>
DeviceOwnerの情報は、端末の/data/system/device_owner.xmlに記載されている。
このファイルを自分で作成し端末を再起動することでもDeviceOwnerになることが可能である。
サイレントインストール・アンインストール
http://qiita.com/machortz/items/5206773c6ece286e52a3
DeviceOwnerでこれを実行するだけである。
サンプルをGithubに置いておく。
サイレントインストール・アンインストールが完了すると、以下のNotificationが表示される。
ここでの対象はfirefoxである。