Meine App hat einen Dienst und eine Aktivität. Vom Dienst wird die Aktivität mit folgendem Code aufgerufen:
Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
Auch ohne die Flags wird normalerweise das Aktivitätsfenster mit dem richtigen Layout angezeigt. Auf Xiaomi Redmi Note 4 mit Android 7 wird das Aktivitätslayout jedoch nicht angezeigt. Ich sehe nur die folgende Zeile auf logcat:
I / Timeline: Timeline: Activity_launch_request Zeit: 281438674 Absicht: Absicht {flg = 0x30000000 cmp = com.test.app / .MainActivity}
Ich glaube, dies ist kein Problem mit Android 7 (API 24), da auf einem anderen Gerät mit Android 7 der Dienst die Aktivität erfolgreich starten kann. Ich denke, MIUI verhindert, dass der Start der Aktivität aus dem Dienst genommen wird.
Ich habe versucht zu ändern, wie die Aktivität im Manifest definiert wurde. Ich habe es auch mit verschiedenen Flaggen versucht. Alle meine Tests sind fehlgeschlagen. Es konnte mir nicht gelingen, die Aktivität zu starten. Das schlimmste Problem ist, dass es keine Fehler / Ausnahmen in den Protokollen gibt.
Irgendwelche Ideen dazu bitte?
Antworten:
Im App-Info-Bildschirm der Systemeinstellungen-App> Andere Berechtigungen> Popup-Fenster anzeigen, während sie im Hintergrund ausgeführt werden.
Dies scheint in MIUI 11 eingeführt zu sein.
Bearbeiten: Hier ist ein Stück Code, den ich benutze. Ich füge das in eine Berechtigungsliste in a ein
RecyclerView
.UPDATE: Um zu überprüfen, ob diese Berechtigung erteilt wurde, können Sie einen bereits ausgeführten Dienst verwenden und eine transparente Dummy-Aktivität starten. Beim
onCreate
Rückruf auf eineLocalBroadcastManager
oder eine ähnliche Funktion wissen Sie, dass sie erteilt wurde. Es ist eine hässliche Lösung, aber für einige kann es nützlich sein.quelle