MIUI 10 non consente di avviare l'attività di servizio - Xiaomi Redmi Note


9

La mia app ha un servizio e un'attività. Dal servizio, l'attività viene chiamata con il seguente codice:

Intent intent = new Intent(getApplicationContext(), MainActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);

anche senza i flag, normalmente la finestra delle attività viene visualizzata con il layout corretto. Tuttavia, su Xiaomi Redmi Note 4 con Android 7, il layout dell'attività non viene visualizzato. Vedo solo la seguente riga su logcat:

I / Linea temporale: Linea temporale: Tempo attività_launch_request: 281438674 intento: Intento {flg = 0x30000000 cmp = com.test.app / .MainActivity}

Credo che questo non sia un problema di Android 7 (API 24) perché su un altro dispositivo con Android 7, il servizio può avviare correttamente l'attività. Immagino che MIUI stia impedendo l'avvio dell'attività dal servizio.

Ho provato a cambiare il modo in cui l'attività è stata definita nel manifest. Ho anche provato con diverse bandiere. Tutti i miei test fallirono. Non sono riuscito a iniziare l'attività. Il problema peggiore è che non ci sono errori / eccezioni nei log.

Qualche idea su questo per favore?


Stesso problema su MIUI 11.
AlexS

Risposte:


12

Nella schermata Informazioni app dall'app Impostazioni di sistema> Altre autorizzazioni> Visualizza finestre popup mentre si esegue in background.

Questo sembra introdotto in MIUI 11.

Modifica: ecco un pezzo di codice che uso. Lo aggiungo a un elenco di autorizzazioni in a 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);
}

AGGIORNAMENTO: Per verificare se questa autorizzazione è concessa, è possibile utilizzare un servizio già in esecuzione e avviare un'attività fittizia trasparente, e nella onCreaterichiamata su un LocalBroadcastManagero simile e saprai che è concesso. È una brutta soluzione, ma può essere utile per alcuni.


grazie. questo è davvero il problema. c'è un modo per richiedere questa autorizzazione all'interno dell'app? o aggiungerlo a livello di codice?
Ilker Aktuna,

Nessuno di cui sono a conoscenza. Sto reindirizzando alla schermata delle informazioni sull'app e sto dicendo loro di abilitarlo se sono in MIUI ..
Alex Newman,

ma per farlo è necessario avviare l'app. Come si fa ? attraverso le notifiche?
Ilker Aktuna,

Lo faccio quando richiedo un'altra autorizzazione richiesta quando l'app viene configurata per la prima volta, quindi dall'app principale, non da un servizio.
Alex Newman,

1
Informazioni davvero utili per MIUI, come il solo fatto di dare il permesso all'attività avviata dal servizio in background senza cambiare alcun codice.
Panache
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.