Device Owner について

Android 5.0 で追加された Device Owner を紹介したいと思います。

# Device Owner とは

Device Owner は特別な権限を持ったデバイス管理者([DevicePolicyManager](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html()))です。
会社が所有する Android 端末を社員に配布し管理する、いわゆる MDM (Mobile Device Management) では、業務に不要なアプリの利用を禁止したい、紛失した端末を探したいなどの機能が多く求められています。しかし、Android 4.4 までのデバイス管理者では、アプリを無効にする機能や GPS を ON にする機能は提供されていませんでした。

# Device Owner を有効にする方法

[Android 5.0 の Device Owner を有効にする方法 | I Wanna Be β](http://gsbina.com/?p=1678) にある通り、

1. Device Owner の apk ファイルををダウンロードできるサーバに準備する
2. セットアップが済んでない端末に Android Beam で apk ファイルの URL やチェックサムなどの情報を送信する

という特殊なインストール手順が必要になります。
なお、Device Owner が有効になるとデバイス管理者のチェックは無効にできなくなります。Device Owner を無効にするには [clearDeviceOwnerApp](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#clearDeviceOwnerApp(java.lang.String)) を呼ぶか端末を初期化するしかありません。

# Device Owner にできること

Device Owner にできることを列挙しました。

* デフォルトでの起動を強制([addPersistentPreferredActivity](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#addPersistentPreferredActivity(android.content.ComponentName, android.content.IntentFilter, android.content.ComponentName)))
* アプリの利用禁止([setApplicationHidden](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setApplicationHidden(android.content.ComponentName, java.lang.String, boolean)))
* スクリーンキャプチャの禁止([setScreenCaptureDisabled](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setScreenCaptureDisabled(android.content.ComponentName, boolean)))
* ユーザ補助機能の利用禁止([setPermittedAccessibilityServices](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setPermittedAccessibilityServices(android.content.ComponentName, java.util.List<java.lang.String>)))
* デフォルトの IME 利用の強制([setSecureSetting](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setSecureSetting(android.content.ComponentName, java.lang.String, java.lang.String)))
* アプリのアンインストール禁止([setUninstallBlocked](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setUninstallBlocked(android.content.ComponentName, java.lang.String, boolean)))
* GMail などのアカウント追加と削除の禁止([setAccountManagementDisabled](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setAccountManagementDisabled(android.content.ComponentName, java.lang.String, boolean)))
* ADB の禁止([setGlobalSetting](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setGlobalSetting(android.content.ComponentName, java.lang.String, java.lang.String)))
* GPS の有効化([setSecureSetting](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#setSecureSetting(android.content.ComponentName, java.lang.String, java.lang.String)))
* マルチユーザの作成/削除/切り替え([createUser](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#createUser(android.content.ComponentName, java.lang.String)), [removeUser](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#removeUser(android.content.ComponentName, android.os.UserHandle)), [switchUser](https://developer.android.com/reference/android/app/admin/DevicePolicyManager.html#switchUser(android.content.ComponentName, android.os.UserHandle)))

# サンプル

サンプルを作成しました。

## Device Owner を有効化するアプリ

[bina1204/DeviceOwnerActivator](https://github.com/bina1204/DeviceOwnerActivator)

下記の情報を追加する必要があります。

* Device Owner のパッケージ名
* apk ファイルのダウンロード URL
* apk ファイルのチェックサム

## Device Owner の機能を実行するアプリ

[bina1204/DeviceOwnerManager](https://github.com/bina1204/DeviceOwnerManager)

ダウンロードできるサーバにアップロードする必要があります。