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.