How to know whether Notifications are enabled or not for an application in android?

你。 提交于 2019-11-30 11:51:21

I am afraid this is only possible for the current application. That is why the public API of NotificationManager has the function areNotificationsEnabled() for the current package.

When looking into android source code, I found AppNotificationSettings - application notification settings. The first switch indicates, whether notifications are blocked or not. The switch listener is here, which points to NotificationBackend. In this class, there is method:

public boolean getNotificationsBanned(String pkg, int uid)

which uses INotificationManager ( a class generated from .aidl file during compilation) and it's method:

boolean areNotificationsEnabledForPackage(String pkg, int uid);

This is Android private API, cannot be simply invoked. So I tried reflection:

try {
    NotificationManager mNotificationManager = null;
    Class<?> c = Class.forName("android.app.NotificationManager");
    Method method = c.getMethod("getService");
    Object obj = method.invoke(mNotificationManager);
    Class<?> clazz = Class.forName("android.app.INotificationManager$Stub$Proxy");
    Method areNotificationsEnabledForPackage = clazz.getMethod("areNotificationsEnabledForPackage", String.class, int.class);
    boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, getPackageName(), android.os.Process.myUid());
    Log.d(MainActivity.class.getSimpleName(), String.valueOf(blocked));
} catch (Exception e) {
    e.printStackTrace();
}

However, as you can see, you must first create NotificationManager. Sadly, this class is created for package. So the code above will for only for :

boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, getPackageName(), android.os.Process.myUid());

however this will not work :

//InvocationTargetException will be thrown.
boolean blocked = (boolean) areNotificationsEnabledForPackage.invoke(obj, "com.android.camera", 10040);

Conclusion:

Cannot be done.

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!