[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】端末を初期化する

 

万が一に備えて、アプリ内で解除できるように備えておくと良いかもしれません。