2016-09-02 4 views
0

Je veux savoir si l'utilisateur autorise les autorisations de démarrage automatique de l'application. Je l'ai déjà essayé:Android - Comment puis-je savoir si l'application est autostart ou non

ComponentName mComponentName = new ComponentName(getPackageName(),".AutoStartReceiver"); 
int a = getPackageManager().getComponentEnabledSetting(mComponentName); 

l'autorisation de démarrage automatique peut être accordée et refusée par l'application de la sécurité, mais je ne sais pas comment obtenir le statut de ma demande. such as the picture

+0

j'avais essayé d'utiliser « ContextCompat.checkSelfPermission (...) » et obtenir obtenir une liste des récepteurs, mais l'Etat n'a pas changé quand l'utilisateur a refusé les autorisations – Neo

Répondre

0

vous utilisez probablement cette autorisation:

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> 

Après cela, vous pouvez mettre en œuvre un BroadcastReceiver:

public class BootUpReceiver extends BroadcastReceiver { 
@Override 
public void onReceive(Context context, Intent intent) { 
    AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE); 
    PendingIntent pi = PendingIntent.getService(context, 0, new Intent(context, MyService.class), PendingIntent.FLAG_UPDATE_CURRENT); 
    am.setInexactRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() + interval, interval, pi); 
}} 

Et il suffit d'ajouter la classe à votre fichier manifeste:

<receiver android:enabled="true" android:name=".BootUpReceiver" 
     android:permission="android.permission.RECEIVE_BOOT_COMPLETED"> 
     <intent-filter> 
      <action android:name="android.intent.action.BOOT_COMPLETED" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </receiver> 

Pour vérifier directement, si vous disposez des autorisations Autostart, utilisez ceci:

int p = ContextCompat.checkSelfPermission(Activity.this, Manifest.permission.RECEIVE_BOOT_COMPLETED); 
if (p == PackageManager.PERMISSION_GRANTED) { 
    //Yay, you have the receive boot completed (= Autostart) permission! 
} 
+0

pls lire complètement une question avant de poster réponse –

+0

Pourquoi la downvote? Si l'alarme est appelée, vous savez que l'utilisateur autorise la permission. Si vous avez besoin des informations immédiatement, vérifiez-les via: int p = ContextCompat.checkSelfPermission (Activity.this, Manifest.permission.RECEIVE_BOOT_COMPLETED); Et utilisez si pour le vérifier: if (p == PackageManager.PERMISSION_GRANTED) {/*...*/} – jdstaerk

+0

La question est de savoir comment obtenir si l'application spécifique a un récepteur 'BOOT_COMPLETE' enregistré. –

0

Pour obtenir une liste des récepteurs, inscrits à une intention spécifique, vous pouvez utiliser Utilisez PackageManager et queryBroadcastReceivers().

Pour obtenir une liste pour BOOT_COMPLETE, la construction d'une intention avec BOOT_COMPLETE l'action

+0

Merci d'avoir répondu, je suis désolé que j'exprime n'est pas clair – Neo