Comment savoir si les notifications sont activées ou non pour une application dans Android?

J'ai un ListView qui a la liste des applications installées et pour chaque application, je dois savoir si les notifications sont activées ou non. Actuellement, j'utilise le code ci-dessous pour savoir si les notifications sont activées:

appOpsClass = Class.forName(AppOpsManager.class.getName()); Method checkOpNoThrowMethod = appOpsClass.getMethod(CHECK_OP_NO_THROW, Integer.TYPE, Integer.TYPE, String.class); Field opPostNotificationValue = appOpsClass.getDeclaredField(OP_POST_NOTIFICATION); int value = (int)opPostNotificationValue.get(Integer.class); return ((int)checkOpNoThrowMethod.invoke(mAppOps,value, appUID, appPackage) == AppOpsManager.MODE_ALLOWED); 

J'ai l'exception suivante:

  • Est-il possible de passer des arguments à un fragment après qu'il a été ajouté à une activité?
  • Adaptation des réponses améliorées à l'aide de GSON
  • Connectez-vous au périphérique bluetooth apparié de Xamarin sur Android
  • Comment faire pour que Android and aapt et adb fonctionnent sur Ubuntu 64 bits sans i32-libs (fonctionne pour les versions 12, 13 et 14)
  • Fake Poor Internet
  • Différences entre Jar, Android Library et Android Library Project
  • Causé par: java.lang.SecurityException: uid 10062 n'a pas android.permission.UPDATE_APP_OPS_STATS. W / System.err: à android.os.Parcel.readException (Parcel.java:1683) W / System.err: à android.os.Parcel.readException (Parcel.java:1636) W / System.err: at com .android.internal.app.IAppOpsService $ Stub $ Proxy.checkOperation (IAppOpsService.java:343)

    J'ai inclus

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

    Je reçois toujours la même erreur. En utilisant ce que apis puis-je obtenir, que ce soit bloqué ou non

    En utilisant quels apis puis-je obtenir ces valeurs?

  • Comment puis-je transférer mon adresse IP localhost vers un émulateur Android?
  • Dois-je utiliser ProGuard?
  • Comment exécuter mon code sur le thread spécifique?
  • La redirection d'URL ne fonctionne pas dans Android via Intention - (Erreur non trouvée en page)
  • StateListDrawable pour changer les filtres de couleur
  • Quelle est la différence entre la vue et l'activité dans le développement d'Android?
  • 2 Solutions collect form web for “Comment savoir si les notifications sont activées ou non pour une application dans Android?”

    Je crains que cela ne soit possible que pour l'application actuelle. C'est pourquoi l'API publique de NotificationManager a la fonction areNotificationsEnabled() pour le paquet actuel.

    Lors de la recherche sur le code source Android, j'ai trouvé AppNotificationSettings – paramètres de notification d'application. Le premier commutateur indique si les notifications sont bloquées ou non. L'auditeur de commutation est ici , ce qui indique NotificationBackend . Dans cette classe, il existe une méthode:

    public boolean getNotificationsBanned(String pkg, int uid)

    INotificationManager utilise INotificationManager (une classe générée à partir .aidl fichier .aidl pendant la compilation) et sa méthode:

    boolean areNotificationsEnabledForPackage(String pkg, int uid);

    Il s'agit de l'API privée d'Android, ne peut pas être invoqué simplement. J'ai donc essayé la réflexion:

     try { NotificationManager mNotificationManager = null; Class<?> c = Class.forName("android.app.NotificationManager"); Method method = c.getMethod("getService"); Object obj = method.invoke(mNotificationManager); Class<?> clazz = Class.forName("android.app.INotificationManager$Stub$Proxy"); Method areNotificationsEnabledForPackage = clazz.getMethod("areNotificationsEnabledForPackage", String.class, int.class); boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, getPackageName(), android.os.Process.myUid()); Log.d(MainActivity.class.getSimpleName(), String.valueOf(blocked)); } catch (Exception e) { e.printStackTrace(); } 

    Cependant, comme vous pouvez le voir, vous devez d'abord créer NotificationManager . Malheureusement, cette classe est créée pour le paquet. Donc le code ci-dessus sera pour seulement pour:

     boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, getPackageName(), android.os.Process.myUid()); 

    Mais cela ne fonctionnera pas:

     //InvocationTargetException will be thrown. boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, "com.android.camera", 10040); 

    Conclusion:

    Ne peut pas être fait.

    Voyez si vous pouvez utiliser NotificationManagerCompat.areNotificationsEnabled () https://developer.android.com/reference/android/support/v4/app/NotificationManagerCompat.html#areNotificationsEnabled ()

    Android 4.1: Comment vérifier les notifications sont désactivées pour l'application?

    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.