Janusz
Janusz

Reputation: 189594

Is there a way an app can check if it is allowed to access notifications?

I want to implement an NotificationListenerService to get access to all notifications that are posted to the notification bar.

I understand that I need to enable access to the Notifications in the Settings with this call:

startActivity(new Intent("android.settings.ACTION_NOTIFICATION_LISTENER_SETTINGS"));

Is there a way to check if the user activated Notification access for my app?

Upvotes: 14

Views: 8387

Answers (4)

Pratik Fagadiya
Pratik Fagadiya

Reputation: 1472

Use listnerConnected boolean in your Service class

public class NotifyListener extends NotificationListenerService{    
    public static boolean listnerConnected = false;
    @Override
    public IBinder onBind(Intent intent) {
        Log.d(name,"onBind Called");
        listnerConnected = true;
        return super.onBind(intent);
}   

    @Override
    public void onDestroy()
    {       
        super.onDestroy();        
        Log.e("destroy", "called");
        listnerConnected = false;

    }
}

Upvotes: 0

asamoylenko
asamoylenko

Reputation: 2465

Try:

NotificationManagerCompat.from(context).areNotificationsEnabled()

Upvotes: 0

Rapsoulis
Rapsoulis

Reputation: 232

Probably for API 19 (4.4) and higher. Although I tried on API 21 (5.0)

String enabledListeners = Settings.Secure.getString(context.getContentResolver(), 
"enabled_notification_listeners");

"secured" was turning RED. If you want to use it you have to use:

String enabledNotificationListeners = 
  android.provider.Settings.Secure.getString(context.getContentResolver(), 
  "enabled_notification_listeners");

Upvotes: 2

Ricardo
Ricardo

Reputation: 7975

I managed to find a slight hack to solve this. If you check the source of Settings.Secure, you will see that ENABLED_NOTIFICATION_LISTENERS is annotated with @hide. I don't know if this is intentional or not. On a related topic, CommonsWare does mention in another answer that there is a bug preventing the starting of this setting so I guess is unintentional.

Anyway, to work around this, all I did was to fetch the current list of enabled notification listeners using the string value of ENABLED_NOTIFICATION_LISTENERS:

String enabledListeners = Settings.Secure.getString(context.getContentResolver(), 
    "enabled_notification_listeners");

Then you just have to check if your service is in the list.

I did not test this on all API >= 18 yet but it is working on Android 4.4.2.

Upvotes: 14

Related Questions