Moja aplikacja ma usługę i aktywność. Z usługi wywoływana jest aktywność z następującym kodem:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
nawet bez flag zwykle okno aktywności jest wyświetlane z poprawnym układem. Jednak w Xiaomi Redmi Note 4 z Androidem 7 układ aktywności nie jest wyświetlany. Na logcat widzę tylko następujący wiersz:
I / Oś czasu: Oś czasu: Activity_launch_request czas: 281438674 intent: Intent {flg = 0x30000000 cmp = com.test.app / .MainActivity}
Uważam, że nie jest to problem z Androidem 7 (API 24), ponieważ na innym urządzeniu z Androidem 7 usługa może pomyślnie rozpocząć działanie. Wydaje mi się, że MIUI uniemożliwia uruchomienie działalności z usługi.
Próbowałem zmienić sposób zdefiniowania działania w manifeście. Próbowałem też z kilkoma różnymi flagami. Wszystkie moje testy zakończyły się niepowodzeniem. Nie udało mi się rozpocząć działalności. Najgorsze jest to, że w dziennikach nie ma błędu / wyjątku.
Masz jakieś pomysły na ten temat?
Odpowiedzi:
Na ekranie Informacje o aplikacji w aplikacji Ustawienia systemowe> Inne uprawnienia> Wyświetl wyskakujące okna podczas działania w tle.
Wydaje się, że zostało to wprowadzone w MIUI 11.
Edycja: oto fragment kodu, którego używam. Dodaję to do listy uprawnień w
RecyclerView
.AKTUALIZACJA: Aby sprawdzić, czy to zezwolenie zostało udzielone, możesz skorzystać z już uruchomionej usługi i uruchomić fałszywe działanie przezroczyste, a także w
onCreate
oddzwanianiu naLocalBroadcastManager
podobnym lub podobnym, a będziesz wiedział, że zostało udzielone. To brzydkie rozwiązanie, ale dla niektórych może być przydatne.źródło