首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何以编程方式检查"enabled_notification_listeners“?

如何以编程方式检查"enabled_notification_listeners“?
EN

Stack Overflow用户
提问于 2017-12-06 11:23:04
回答 2查看 2.1K关注 0票数 4

我需要检查我的应用程序的服务是否在"Notification“中启用。

我正在使用这个代码来检查这个。该代码在本体上运行良好,但它在Marshmallow上崩溃。我如何在Marshmallow上做到这一点?

代码语言:javascript
复制
android.provider.Settings.Secure.getString(this.getContentResolver(), "enabled_notification_listeners").contains(getApplicationContext().getPackageName())

这是在LogCat中的错误

代码语言:javascript
复制
12-06 15:28:02.905 4428-4428/com.inetsoho.app.SkyChat E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.inetsoho.app.SkyChat, PID: 4428
    java.lang.IllegalStateException: Could not execute method for android:onClick
        at android.view.View$DeclaredOnClickListener.onClick(View.java:4740)
        at android.view.View.performClick(View.java:5697)
        at android.view.View$PerformClick.run(View.java:22526)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:158)
        at android.app.ActivityThread.main(ActivityThread.java:7224)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
     Caused by: java.lang.reflect.InvocationTargetException
        at java.lang.reflect.Method.invoke(Native Method)
        at android.view.View$DeclaredOnClickListener.onClick(View.java:4735)
        at android.view.View.performClick(View.java:5697) 
        at android.view.View$PerformClick.run(View.java:22526) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7224) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120) 
     Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean java.lang.String.contains(java.lang.CharSequence)' on a null object reference
        at com.inetsoho.app.SkyChat.ui.activities.authorization.LandingActivity.SignUpPhoneNumberOnClickListener(LandingActivity.java:110)
        at java.lang.reflect.Method.invoke(Native Method) 
        at android.view.View$DeclaredOnClickListener.onClick(View.java:4735) 
        at android.view.View.performClick(View.java:5697) 
        at android.view.View$PerformClick.run(View.java:22526) 
        at android.os.Handler.handleCallback(Handler.java:739) 
        at android.os.Handler.dispatchMessage(Handler.java:95) 
        at android.os.Looper.loop(Looper.java:158) 
        at android.app.ActivityThread.main(ActivityThread.java:7224) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1230) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1120)
EN

回答 2

Stack Overflow用户

发布于 2018-08-07 10:40:45

使用此函数可获得包中是否有通知侦听器。此函数将返回真假。

代码语言:javascript
复制
boolean hasNotificationAccess()
    {
        ContentResolver contentResolver = this.getContentResolver();
        String enabledNotificationListeners = Settings.Secure.getString(contentResolver, "enabled_notification_listeners");
        String packageName = this.getPackageName();

        // check to see if the enabledNotificationListeners String contains our package name
        return !(enabledNotificationListeners == null || !enabledNotificationListeners.contains(packageName));
    } 
票数 2
EN

Stack Overflow用户

发布于 2020-03-30 07:32:14

您还可以直接检查您的服务:

代码语言:javascript
复制
context?.applicationContext?.let {

  val componentName = ComponentName(it, YourNotificationListenerService::class.java)

  val enabledNotificationListeners: String? =
                Settings.Secure.getString(it.contentResolver, "enabled_notification_listeners")

  return enabledNotificationListeners != null && enabledNotificationListeners.contains(
                componentName.flattenToString())
}

缺点是您需要访问上下文。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47673127

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档