MainActivity.kt
package com.cfsuman.kotlinexamples
import android.app.NotificationManager
import android.content.Context
import android.support.v7.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*
import android.widget.Toast
import android.content.Intent
import android.os.Build
import android.provider.Settings
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
// get the notification manager system service
val notificationManager = getSystemService(NOTIFICATION_SERVICE) as NotificationManager
// Click listener for button widget
button_on.setOnClickListener {
if (checkNotificationPolicyAccess(notificationManager)){
notificationManager.onDOD()
toast("Do Not Disturb turned on.")
}
}
// Click listener for button widget
button_off.setOnClickListener{
if (checkNotificationPolicyAccess(notificationManager)){
notificationManager.offDOD()
toast("Do Not Disturb turned off")
}
}
// Click listener for button widget
button_on_alarm.setOnClickListener{
if (checkNotificationPolicyAccess(notificationManager)){
notificationManager.onAlarmDOD()
toast("Do Not Disturb Alarm Only.")
}
}
}
// Method to check notification policy access status
private fun checkNotificationPolicyAccess(notificationManager:NotificationManager):Boolean{
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (notificationManager.isNotificationPolicyAccessGranted){
//toast("Notification policy access granted.")
return true
}else{
toast("You need to grant notification policy access.")
// If notification policy access not granted for this package
val intent = Intent(Settings.ACTION_NOTIFICATION_POLICY_ACCESS_SETTINGS)
startActivity(intent)
}
}else{
toast("Device does not support this feature.")
}
return false
}
}
/*
*** reference source developer.android.com ***
INTERRUPTION_FILTER_NONE
Interruption filter constant - No interruptions filter - all notifications are suppressed
and all audio streams (except those used for phone calls) and vibrations are muted.
INTERRUPTION_FILTER_ALL
Interruption filter constant - Normal interruption filter - no notifications are suppressed.
INTERRUPTION_FILTER_ALARMS
Interruption filter constant - Alarms only interruption filter - all notifications except
those of category CATEGORY_ALARM are suppressed.
INTERRUPTION_FILTER_PRIORITY
Interruption filter constant - Priority interruption filter - all notifications are
suppressed except those that match the priority criteria.
*/
// Extension function to turn on do not disturb
fun NotificationManager.onDOD(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_NONE)
}
}
// Extension function to turn off do not disturb
fun NotificationManager.offDOD(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALL)
}
}
// Extension function to set alarms only interruption filter
fun NotificationManager.onAlarmDOD(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
this.setInterruptionFilter(NotificationManager.INTERRUPTION_FILTER_ALARMS)
}
}
// Extension function to show toast message
fun Context.toast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
}
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:id="@+id/root_layout"
android:background="#8cb19c"
android:padding="16dp"
android:orientation="vertical"
>
<Button
android:id="@+id/button_on"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Turn On Do Not Disturb"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
/>
<Button
android:id="@+id/button_off"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Turn Off Do Not Disturb"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
/>
<Button
android:id="@+id/button_on_alarm"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Turn On Alarm Do Not Disturb"
android:layout_gravity="center_horizontal"
android:layout_margin="10dp"
/>
</LinearLayout>
AndroidManifest.xml [Permission]
<uses-permission android:name="android.permission.ACCESS_NOTIFICATION_POLICY"/>
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhIzTw0iWaaEmDh4zEyovCI4gV_gTbmLdn50T_ZVYZdxM-z-9FPRBR-wGCjcFkBRSlEi7NGl9EGrGkt6A7OrSCCQUL_5siatqUF733yyvvv_BKu66-e521Ha7XHhZkb1IgaN7kukeDcFtkM/s1600/AndroidKotlinTurnOnOffDoNotDisturbProgrammatically.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhjcLp9eyaqZpJwL2JNRKP-ZxYb1Zw1k1gd9l7CljEecWcq6_IWzvBts9zupVwWrX3I5oGZJLM338VIY66ZAmKXoRiAhcA-eBK5C44LaAIduPTaHBO1_s1IQzaYBahDog__HWFdrxthd2tL/s1600/AndroidKotlinTurnOnOffDoNotDisturbProgrammatically3.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgk5bDgIACDPZ0j4n5iynTNwBmb-NfjLyk8D1WxOAynPByDxrul84-9rTubZMrj8Oh00eP5TKyfbhZVONPoumkKC-Jd_nET1UNcQTDnNS7o0KWNZGVNQdy5DQlH2JZ04U7YKDyMXH2K8m6H/s1600/AndroidKotlinTurnOnOffDoNotDisturbProgrammatically4.png)