[Android] KotlinでDeviceOwnerの有効化
Kotlinを使ってDeviceOwnerの有効化をしてみたのでメモしておきます。
1.アプリを用意する
MainActivity.kt
class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) //画面固定化 this.startLockTask() //画面固定を解除するボタンを用意する button.setOnClickListener { this.stopLockTask() } } }
MyDeviceAdminReceiver.kt
class MyDeviceAdminReceiver : DeviceAdminReceiver() { override fun onEnabled(context: Context?, intent: Intent?) { super.onEnabled(context, intent) context?.run { val deviceAdmin = ComponentName(this, MyDeviceAdminReceiver::class.java) val dpm = this.getSystemService(Context.DEVICE_POLICY_SERVICE) as DevicePolicyManager // ユーザーの確認ステップなしで、強制的にアプリ画面の固定を有効にできる dpm.setLockTaskPackages(deviceAdmin, arrayOf(this.packageName)) } } }
res/xml/device_admin.xmlを作成する
device_admin.xml
<device-admin xmlns:android="http://schemas.android.com/apk/res/android"> <uses-policies> </uses-policies> </device-admin>
AndroidManifest.xmlにreceiverを追加
AndroidManifest.xml
<receiver android:name=".MyDeviceAdminReceiver" android:label="device admin" android:permission="android.permission.BIND_DEVICE_ADMIN"> <meta-data android:name="android.app.device_admin" android:resource="@xml/device_admin"/> <intent-filter> <action android:name="android.app.action.DEVICE_ADMIN_ENABLED"/> </intent-filter> </receiver>
2.アプリを端末にインストールして、起動する。
3.コマンドプロンプトで下記コマンドを叩く。
$ adb shell dpm set-device-owner パッケージ名/.MyDeviceAdminReceiver
これで、アプリにDevice Owner権限を付与できました。
●注意点
Device Owner権限を解除する方法は、下記の通りです。(他にもあるかも?)
【方法1】アプリ内で、解除用のメソッドを呼ぶ
val dpm = getSystemService(DEVICE_POLICY_SERVICE) as DevicePolicyManager dpm.clearDeviceOwnerApp(packageName)
【方法2】端末を初期化する
万が一に備えて、アプリ内で解除できるように備えておくと良いかもしれません。