Мое приложение имеет сервис и активность. Из сервиса активность вызывается с помощью следующего кода:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
даже без флагов, как правило, окно активности отображается с правильной компоновкой. Однако на Xiaomi Redmi Note 4 с Android 7 макет активности не отображается. Я вижу только следующую строку в logcat:
I / временная шкала: временная шкала: Activity_launch_request time: 281438674 намерение: намерение {flg = 0x30000000 cmp = com.test.app / .MainActivity}
Я полагаю, что это не проблема Android 7 (API 24), потому что на другом устройстве с Android 7 служба может успешно запустить действие. Я думаю, MIUI препятствует запуску активности из сервиса.
Я попытался изменить способ определения активности в манифесте. Я также попробовал с несколькими разными флагами. Все мои тесты провалились. Я не смог начать работу. Хуже всего то, что в журналах нет ошибок / исключений.
Любые идеи по этому поводу, пожалуйста?
Ответы:
На экране «Информация о приложении» в приложении «Системные настройки»> «Другие разрешения»> «Отображать всплывающие окна при работе в фоновом режиме».
Это, кажется, введено в MIUI 11.
Изменить: вот кусок кода, который я использую. Я добавляю это в список разрешений в
RecyclerView
.ОБНОВЛЕНИЕ: чтобы проверить, предоставлено ли это разрешение, вы можете использовать уже работающую службу и запустить фиктивную прозрачную операцию, а при
onCreate
обратном вызовеLocalBroadcastManager
или аналогичном, и вы будете знать, что оно предоставлено. Это уродливое решение, но для некоторых оно может быть полезным.источник