MIUI 10 не дозволяє сервісу розпочати діяльність - Xiaomi Redmi Note


9

У моєму додатку є послуга та діяльність. З сервісу викликається діяльність із таким кодом:

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 / Timeline: Timeline: Activity_launch_request time: 281438674 наміри: Намір {flg = 0x30000000 cmp = com.test.app / .MainActivity}

Я вважаю, що це не проблема Android 7 (API 24), оскільки на інших пристроях з Android 7 сервіс може успішно розпочати діяльність. Я думаю, MIUI заважає запускати діяльність із обслуговування.

Я спробував змінити спосіб визначення активності в маніфесті. Я також спробував з кількома різними прапорами. Всі мої тести провалилися. Мені не вдалося розпочати діяльність. Найгірше те, що в журналах немає помилок / винятку.

Будь-які ідеї з цього приводу?


Та ж проблема в MIUI 11.
AlexS

Відповіді:


12

На екрані Інформація про програму в додатку Налаштування системи> Інші дозволи> Відображення спливаючих вікон під час роботи у фоновому режимі.

Це здається введеним в MIUI 11.

Редагувати: ось фрагмент коду, який я використовую. Я додаю це до списку дозволів у RecyclerView.

Class<?> c = Class.forName("android.os.SystemProperties");
Method get = c.getMethod("get", String.class);
String miui = (String) get.invoke(c, "ro.miui.ui.version.name");
if (miui != null && miui.contains("11")) {
            PermissionData mPopup = new PermissionData();
            mPopup.text = "Other permissions > Display pop-up while in background";
            mPopup.onClickListener = new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
                    Uri uri = Uri.fromParts("package", getPackageName(), null);
                    intent.setData(uri);
                    startActivity(intent);
                }
            };

            mPermissionData.add(mPopup);
}

ОНОВЛЕННЯ: Щоб перевірити, чи надано цей дозвіл, ви можете скористатися вже запущеною службою та запустити прозору трансляцію, а також у onCreateзворотному дзвінку на LocalBroadcastManagerабо подібному, і ви дізнаєтесь, що це надано. Це некрасиве рішення, але може бути корисним для деяких.


Дякую тобі. це справді питання. чи є можливість запросити цей дозвіл у програмі? або додати програмно?
ilker

Жодного, що мені відомо. Я переадресовую на екран інформації про додаток і кажу їм, щоб увімкнути це, якщо вони перебувають на MIUI ..
Alex Newman

але для цього вам потрібно запустити додаток. як ви це робите ? через сповіщення?
ilker

Я це роблю, коли вперше налаштовується потрібний дозвіл. Отож з головного додатка, а не від служби.
Алекс Ньюмен

1
Дійсно корисна інформація для MIUI, як лише надання дозволу розпочатої діяльності від фонової служби без зміни будь-якого коду.
Панаш
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.