2015-12-08 5 views
14

Ho un servizio nella mia app che deve essere in esecuzione in background tutto il tempo, in tutti i dispositivi funziona bene eccetto Xiaomi, ho letto un po 'dove dobbiamo abilitare avvio automatico nelle impostazioni dell'app per mantenere in funzione il servizio.Come abilitare l'avvio automatico per la mia app in xiaomi programmaticamente

Quindi, per favore dimmi come abilitare l'avvio automatico in modo programmatico perché l'utente non lo farà mai.

Qualsiasi aiuto sarà apprezzato.

+4

è solito essere in grado di farlo dal codice e fino a meno v'è una certa API da Xiaomi che consente di accedere a tale funzionalità. Sto indovinando auto start manager è un'app (con privilegi di quella di un'app di sistema, poiché parte di xiaomi ha modificato l'OS), quindi non è possibile. D'altra parte se il dispositivo è rootato puoi effettivamente disabilitare il gestore autostart. –

+10

@Radix come whatsapp, facebook e molte altre app lo fanno? –

+4

Suppongo che abbiano legami con Xiaomi per essere nella whitelist. Ma è solo una supposizione. –

risposta

6

Prova questo ... funziona per me. Si aprirà lo schermo per abilitare l'avvio automatico. Ma se provi a disabilitare da lì, chiuderà l'app. Sto cercando una soluzione per questo. Fino ad allora puoi usare questo come soluzione.

String manufacturer = "xiaomi"; 
     if(manufacturer.equalsIgnoreCase(android.os.Build.MANUFACTURER)) { 
      //this will open auto start screen where user can enable permission for your app 
      Intent intent = new Intent(); 
      intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); 
      startActivity(intent); 
     } 
+1

thnx, ha funzionato per me – Pratswinz

+0

Mohit ogni volta che si chiede come si fa a filtrare quella domanda solo una volta esiste un metodo di callback per questo. –

+0

@ Il callback di M.Yogeshwaran non è presente poiché sto cercando esplicitamente di chiamare l'attività. –

0

si può fare seguendo:

 if (manufactXiaomi.equalsIgnoreCase(android.os.Build.MANUFACTURER)) { 
     if (!session.getVisibilityOfAutoStartDialog()) {Intent intent = new Intent(); 
      intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); 
      startActivity(intent);}} 

se si vuole continuare a correre il vostro servizio è lo sfondo è necessario modificare alcune impostazioni del dispositivo Check This

forza sopra le opere di codice per voi

+0

come risolverlo chiedendo solo una volta usando questo si sta chiedendo ogni volta –

+0

@ M.Yogeshwaran A livello di codice non possiamo controllare lo stato di auto-start. 1. Avere un'impostazione permanente per "Abilita avvio automatico" nella schermata delle impostazioni dell'app. 2.E mostra una finestra di dialogo/scheda nella schermata iniziale con l'opzione di rimozione. E infine fai questo controllo solo per i dispositivi che hanno questo problema di avvio automatico. –

5

Non è possibile abilitare l'avvio automatico direttamente, ma è possibile reindirizzare l'utente alla schermata di impostazione di avvio automatico e chiedere all'utente di accenderlo per l'app . Utilizzare la seguente soluzione per telefoni xiaomi, oppo e vivo. La schermata di avvio automatico verrà avviata se esiste.

try { 
     Intent intent = new Intent(); 
     String manufacturer = android.os.Build.MANUFACTURER; 
     if ("xiaomi".equalsIgnoreCase(manufacturer)) { 
      intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); 
     } else if ("oppo".equalsIgnoreCase(manufacturer)) { 
      intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")); 
     } else if ("vivo".equalsIgnoreCase(manufacturer)) { 
      intent.setComponent(new ComponentName("com.vivo.permissionmanager", "com.vivo.permissionmanager.activity.BgStartUpManagerActivity")); 
     } 

     List<ResolveInfo> list = context.getPackageManager().queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY); 
     if (list.size() > 0) { 
      context.startActivity(intent); 
     } 
    } catch (Exception e) { 
     Crashlytics.logException(e); 
    } 
+3

il nome dell'attività per vivo non è corretto. forse lo cambiano dalla versione alla versione. – desidigitalnomad

+1

In oppo lollypop funziona ma marshmallow non funziona – user3069590

1
try this 


if ("xiaomi".equalsIgnoreCase(str)) 
{ 
intent.setComponent(new ComponentName("com.miui.securitycenter", "com.miui.permcenter.autostart.AutoStartManagementActivity")); 
        } 
else if ("oppo".equalsIgnoreCase(str)) 
{ 
intent.setComponent(new ComponentName("com.coloros.safecenter", "com.coloros.safecenter.permission.startup.StartupAppListActivity")); 
        } 
else if ("vivo".equalsIgnoreCase(str)) 
{ 
    intent.setComponent(new ComponentName("com.iqoo.secure", "com.iqoo.secure.MainGuideActivity.")); 
} 
+1

ho bisogno di reindirizzare alla schermata di avvio automatico manager in vivo, "com.iqoo.secure.MainGuideActivity" si sta fermando a metà strada – user3069590

Problemi correlati