2015-08-06 15 views
22

Android'de programatik olarak 'rahatsız etmeyin' (dnd) özelliğini nasıl açabilirim? Is bana bir şey verecekti bu umuyordum ama öyle değil:Android nasıl programlanabilir olarak rahatsız etmeyin (dnd)

NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     mNotificationManager.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE); 

O gerektirir:

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

kadarıyla söyleyebilirim Hangi

Settings.System.putInt(getContentResolver(), Settings.System.DO_NOT_DISTURB, 1); 

cevap

23

Bu çözüm buldu requestPermissions() yapılırken istek iletişim kutusu açılmaz. Ayarlar -> Ses & Notifcation -> Rahatsız Etmeyin Erişim ayarları menüsünden verilmelidir.

Bu SDK 23 Marshmallow üzerindedir. Ürdün Parsons'dan gelen cevabı iyileştirmek için sadece

+4

'setInterruptionFilter' Lollipop bildirim öncelik filtresi içindir: manifest'te aşağıdaki gibi, uygulamanız için bir tane varsayarak hizmetinizi bildirerek yapılır. Bunun yerine 'setNotificationPolicy' kullanın. –

+0

Ayrıca bildirimleri de gizler mi? Ya da sadece ses ve titreşim? Bunları Lollipop ve aşağıda nasıl engellersiniz? –

+0

@JasonHu iki yöntem de Android API 23 ve üstü Android M gerektirir. –

15

. Önceliği ayarlamak için, yalnızca kullanıcının bir Etkinlik açmasını isteyerek elde edilebilecek bir izne ihtiyacınız vardır. Size Rahatsız Etme uygulamasının iznini etkinleştirmek isteyip istemediğinizi soran bir etkinlik istenir.

NotificationManager mNotificationManager = (NotificationManager) getActivity().getSystemService(Context.NOTIFICATION_SERVICE); 

// Check if the notification policy access has been granted for the app. 
if (!mNotificationManager.isNotificationPolicyAccessGranted()) { 
    Intent intent = new Intent(android.provider.Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS); 
    startActivity(intent); 
} 

bu izni verdikten sonra, bu ayar değiştirilebilir:

Bu Etkinlik bu şekilde açılabilir.

+1

Bu, LG telefonlarının çökmesine neden oluyor (işlem com.android.settings'te). Kimsenin nasıl çözüleceği hakkında bir fikri var mı? –

+0

Ben android 7.1.1 çalıştıran bir LG Nexus 5x var ve bu çalışır. Teşekkürler! –

+0

LG Nexus 5x, LG tarafından yalnızca donanım tarafından yapılmıştır. Saf Android var, bu yüzden çalışıyor. Sorun LG G4'te ve Android 6.0.1 ile LG Flex 2'de (en azından bu telefonların hiçbirine sahip değilim). –

2

LG G4 ile mücadele edenler için bir çözüm var.

LG onu Ancak

ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS 

aldığında nedenle çöküyor

permission.ACCESS_NOTIFICATION_POLICY 

vermek için kurulum ayarları seçeneğini vermedi, LG kurulum

permission.BIND_NOTIFICATION_LISTENER_SERVICE 

vermek için seçenek yaptılar Ve bu izin verildiğinde,

permission.ACCESS_NOTIFICATION_POLICY 

(en azından LG G4'te). Bu seçenek Ayarlar-> Genel-> Güvenlik-> Bildirim erişimi altındadır. Kullanıcının bu izni verebilmesi için, uygulamanızın bunun için istekte bulunması gerekir.

<service android:name="myService" 
     android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> 
    <intent-filter> 
     <action android:name="android.service.notification.NotificationListenerService" /> 
    </intent-filter> 
</service> 
+0

Merhaba, bu izni bir Etkinlik'ten talep etmem gerekiyor. Bunu nasıl yapabilirim? –

+0

Ardından, aktivitemi ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS amacından myService sayfasından mı başlatmalıyız? Biraz daha açıklayabilir misiniz lütfen. – mifthi

İlgili konular