2017-05-03 12 views
8

Rahatsız Etmeyin ayarının hangi uygulamaların baypas edileceğini program aracılığıyla öğrenmeye çalışıyorum. Şimdiye kadar Rahatsız Etmeyin ayarında "Öncelikli uygulama bildirimleri" altında hangi uygulamalara izin verildiğini nasıl bulabilirsiniz?

enter image description here

, ben telefon modunu ya da değil Rahatsız Do ayarlanmış olup olmadığını kontrol etmek için aşağıdaki kodu kullanıyorum:

public static boolean isDnDModeEnabled(Context context) 
{ 
    if(Build.VERSION.SDK_INT <23) 
     return false; 

    try { 
     NotificationManager notificationManager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
     int filterValue = notificationManager.getCurrentInterruptionFilter(); 
     switch(filterValue) 
     { 
      case NotificationManager.INTERRUPTION_FILTER_ALL : Log.d("DND","Interruption filter all"); 
       break; 
      case NotificationManager.INTERRUPTION_FILTER_ALARMS : Log.d("DND","Interruption filter alarms"); 
       break; 
      case NotificationManager.INTERRUPTION_FILTER_PRIORITY : Log.d("DND","Interruption filter priority"); 
       break; 
      case NotificationManager.INTERRUPTION_FILTER_UNKNOWN : Log.d("DND","Interruption filter unknown"); 
       break; 
      case NotificationManager.INTERRUPTION_FILTER_NONE : Log.d("DND","Interruption filter none"); 
       break; 

     } 
     if(filterValue == NotificationManager.INTERRUPTION_FILTER_ALL) 
      return false; 
     else if(filterValue == NotificationManager.INTERRUPTION_FILTER_PRIORITY) 
     { 
      //Logic based on which apps are allowed as priority 

      return true; //or false 
     } 
     else 
      return true; 
    } 
    catch(Exception e) 
    { 
     return false; 
    } 
} 

Ben Öncelik uygulaması notiications tıkladığınızda sekmesi, hangi uygulamaların öncelik istisnaları olarak izin verileceğini seçtiğim yüklü tüm uygulamaların bir listesini alırım.

Sorumum, program aracılığıyla programında, Rahatsız Etmeyin modu için öncelik istisnaları olarak izin verilen uygulamaların listesini alma ve böylece yukarıdaki kodda yorumu değiştiren mantığı nasıl tanımlayacağınızdır? Herhangi bir çözüm iyice takdir edilecektir.

cevap

2

Sen söylemek istemem sistemin var Notification.IMPORTANCE_MAX bir bildirim önemine ve, hangi uygulamaların belirlemek için bir yol arıyorsanız, ancak bu mümkün değildir sistem dışı bir uygulama. INotificationService'a erişmeniz gerekiyor, böylece getImportance(packageName)'u arayabilirsiniz.

tarihinde aracılığıyla kendi bildirim önemini elde etmek bir uygulama verir ... the Notification Manager source Bkz ama bir sistem uygulamasıdır veya kimin paket geçti böylece yansıma çıktı uygulaması olduğunu garanti guarded by a check var NotificationManagergetImportance() (see docs) ile değil bunu keyfi bir paketle arayamazsınız.

Buradaki diğer yanıt, kaynakların sistem ayarları uygulamasından incelenmesi ve yaptığım tam olarak budur ve kodun izini sürdüğüm bir süre sonra, "Geçersiz Kılmalar" da hangi uygulamaların görüneceğini belirledim. biz değil IMPORTANCE_*

Maalesef adamı belirleyebilir nasıl keşfetme yolunu beni indirene this code here tarafından "menüsünü Rahatsız, ancak diğer yanıtlayanın tarafından yapılan öneriler de onlar da yanlış (packages.xml çünkü işe gidiş değildir bilgi yok) veya tüm cihazlarda güvenilir olmayan bir kök gerektirecektir.

+0

Sadece sistem uygulamalarının buna nasıl erişebileceğini söylüyorsunuz? – SoulRayder

+0

@SoulRayder: "bir çekle korunan" bölümünü alamadım: bağlantıyı "bir kontrolle korunan" metinle kontrol edin. Android, bazı kişilerin zor olduğunu ve sistem hizmetlerine yansıtmak için sistem hizmetlerini yansıtmaya çalışacağını bilmektedir. Bu nedenle sistem hizmetlerine, yalnızca onları arayabilecekleri uygulamaları çağırdığını doğrulayan sistem hizmetlerini denetlerler. İşte size engel olacak fonksiyon: http://androidxref.com/7.1.1_r6/xref/frameworks/base/services/core/java/com/android/server/notification/NotificationManagerService.java#checkCallerIsSameApp –

0

Sen (bu bazı şeyleri ayrıcalık erişmesi gerekebilir) şeyler deneyebilirsiniz:

  1. ayarlar uygulamasından için kaynak kodunu indirin ve ayarları listesini elde ettiğini uygulamalarının sayısına bakın.
  2. Packages.xml dosyasını analiz edin. Uygulamalarla ilgili çok fazla bilgi burada saklanır. Liste settings.db saklanır
  3. Kontrol eğer
İlgili konular