Для режима блокировки Android — ActivityManager.lockTaskModeState всегда «LOCK_TASK_MODE_NONE».Android

Форум для тех, кто программирует под Android
Ответить
Anonymous
 Для режима блокировки Android — ActivityManager.lockTaskModeState всегда «LOCK_TASK_MODE_NONE».

Сообщение Anonymous »

Я следую руководству разработчика по режиму блокировки задач. По большей части это понятно, но я думаю, что в некоторых областях нужно немного поработать.
Кажется, в нем содержатся инструкции о том, что вы запускаете другое действие, хотя в нем упоминается перезапуск одного из них на переднем плане:
Начать режим блокировки задачи
"В Android 9.0 (уровень API 28) или выше вы можете запустить активность другого приложения в режиме блокировки задачи. Если действие уже запущено в переднего плана или фона, вам необходимо перезапустить действие. Вызовите ActivityOptions.setLockTaskEnabled() и укажите эти параметры при запуске действия. "
Итак, я пытаюсь добиться того, чтобы при первом возобновлении фрагмента моей MainActivity он проверял, включен ли режим блокировки задач, и если нет, то включал его. Для проверки я использую следующий код из одного из примеров ссылки:
private fun lockTaskModeNotRunning(): Boolean {
// Check if this app is in lock task mode. Screen pinning doesn't count.
var isLockTaskModeRunning = false

val activityManager = context
?.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
isLockTaskModeRunning = activityManager.lockTaskModeState == ActivityManager.LOCK_TASK_MODE_LOCKED
} else if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
// Deprecated in API level 23.
isLockTaskModeRunning = activityManager.isInLockTaskMode
}

return !isLockTaskModeRunning
}

И я перезапускаю приложение, как описано в цитате выше. Но этот код выполняется бесконечно, поскольку строка ActivityManager.lockTaskModeState == ActivityManager.LOCK_TASK_MODE_LOCKED всегда имеет значение false. LockTaskModeState всегда имеет значение LOCK_TASK_MODE_NONE, даже после запуска действия с setLockTaskEnabled как true. Устаревшее поле ActivityManager.isInLockTaskMode также всегда имеет значение false.
Я, должно быть, что-то упустил. Самое странное, что если я остановлю выполнение кода, приложение действительно окажется в режиме блокировки задач (появляется только кнопка «Назад», невозможно перейти на главный экран).
Я также опубликую код onResume своего фрагмента, поскольку он тоже уместен:
override fun onResume() {
super.onResume()

val context = requireContext()
val devicePolicyManager = context.getSystemService(Context.DEVICE_POLICY_SERVICE)
as DevicePolicyManager

val deviceAdminReceiver = ComponentName(context, MyDeviceAdminReceiver::class.java)
devicePolicyManager.setLockTaskPackages(deviceAdminReceiver, APP_PACKAGES)

if (devicePolicyManager.isLockTaskPermitted(KIOSK_PACKAGE)) {

// Set an option to turn on lock task mode when starting the activity.
val options = ActivityOptions.makeBasic()
options.setLockTaskEnabled(true)

if (lockTaskModeNotRunning()) {

// Start our kiosk app's main activity with our lock task mode option.
val packageManager = context.packageManager
val launchIntent = packageManager.getLaunchIntentForPackage(KIOSK_PACKAGE)
if (launchIntent != null) {
context.startActivity(launchIntent, options.toBundle())
}
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/710 ... s-lock-tas
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Android»