Mit MIUI 10 kann der Dienst keine Aktivität starten - Xiaomi Redmi Note

9

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?

ilker Aktuna
quelle
Gleiches Problem auf MIUI 11.
AlexS

Antworten:

12

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.

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);
}

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 onCreateRückruf auf eine LocalBroadcastManageroder 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.

Alex Newman
quelle
Vielen Dank. Das ist wirklich das Problem. Gibt es eine Möglichkeit, diese Berechtigung in der App anzufordern? oder programmgesteuert hinzufügen?
Ilker Aktuna
Keine, die mir bekannt ist. Ich leite zum App-Info-Bildschirm um und sage ihnen, dass sie dies aktivieren sollen, wenn sie auf MIUI sind.
Alex Newman
Dazu müssen Sie jedoch die App starten. wie machst du das ? durch Benachrichtigungen?
Ilker Aktuna
Ich mache es, wenn ich eine andere erforderliche Berechtigung anfordere, wenn die App zum ersten Mal konfiguriert wird. Also von der Haupt-App, kein Dienst.
Alex Newman
1
Wirklich nützliche Informationen für MIUI, da nur die Erlaubnis erteilt wurde, die Aktivität vom Hintergrunddienst zu starten, ohne einen Code zu ändern.
Panache