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.
    }
}
Другие вопросы по тегам