Android Single-Use Devices (COSU) не может войти в lockTaskMode после перезагрузки
Я пытаюсь создать одноразовые устройства (приложение для киоска) и следую инструкциям ниже: https://codelabs.developers.google.com/codelabs/cosu/index.html?index=..%2F..%2Findex
Код работает очень нормально, за исключением случая "перезагрузки". Каждый раз после перезагрузки приложение не блокируется, продолжайте падать в "LOCK_TASK_EXITING" каждый раз после перезагрузки.
07-05 15:45:14.583 785 802 V ActivityManager: Broadcast: Intent { act=android.app.action.LOCK_TASK_ENTERING flg=0x10 cmp=com.google.codelabs.cosu/.DeviceAdminReceiver (has extras) } ordered=false userid=0 callerApp=ProcessRecord{6438256 785:system/1000}
07-05 15:45:14.584 785 802 V ActivityManager: Broadcast: Intent { act=android.app.action.LOCK_TASK_EXITING flg=0x10 cmp=com.google.codelabs.cosu/.DeviceAdminReceiver } ordered=false userid=0 callerApp=ProcessRecord{6438256 785:system/1000}
2 ответа
Посмотрите GitHub... можно обойти эту проблему одинаково:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
if (mSharedPreferences.getBoolean(KEY_PREF_RECREATED, false)) {
mSharedPreferences.edit().putBoolean(KEY_PREF_RECREATED, false).apply();
// start LOCK TASK here
} else {
mSharedPreferences.edit().putBoolean(KEY_PREF_RECREATED, true).apply();
finish(); // close the app
startActivity(new Intent(this, MainActivity.class)); // reopen the app
}
setContentView(R.layout.activity_main);
}
Откуда: https://developer.android.com/work/dpc/dedicated-devices/lock-task-mode#kotlin
Чтобы позвонить вActivity.startLockTask()
метод, активность должна выполняться на переднем плане, рекомендуется вызывать ее внутриonResume()
метод действия или фрагмента.
Пример:
// In our Fragment subclass.
override fun onResume() {
super.onResume()
// First, confirm that this package is allowlisted to run in lock task mode.
if (dpm.isLockTaskPermitted(context.packageName)) {
activity.startLockTask()
} else {
// Because the package isn't allowlisted, calling startLockTask() here
// would put the activity into screen pinning mode.
}
}