Reputation: 189594
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
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
Reputation: 2465
Try:
NotificationManagerCompat.from(context).areNotificationsEnabled()
Upvotes: 0
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
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