in
Android
- 28 2月, 2019
[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】端末を初期化する
万が一に備えて、アプリ内で解除できるように備えておくと良いかもしれません。


