Android权限BIND

编程入门 行业动态 更新时间:2024-10-12 22:32:53
本文介绍了Android权限BIND_NOTIFICATION_LISTENER_SERVICE无法正常工作的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我正在使用React Native Application.我正在Android中努力使用Notification Services& BIND_NOTIFICATION_LISTENER_SERVICE.我正在尝试使用NotificationListenerService阅读传入的通知.

I'm working in React Native Application. I'm trying hard in Android to make use of Notification Services & BIND_NOTIFICATION_LISTENER_SERVICE. I'm trying to read the incoming notifications using NotificationListenerService.

我正在使用 One Plus 5T(Android Oreo)进行调试.

我已经看到很多重复的问题,并且我已经尝试从这些问题中得到的以下解决方案.

I've seen lots of duplicate questions and I've tried the following solutions which I got from those questions.

1.重新启动手机(听起来很傻,无法正常工作)

1.Restarting the phone (Sounds silly and it doesn't work)

2.重新安装/重新构建应用程序

2.Re-install/Re-build the application

  • 重命名NotificationListenerService类文件并运行Etc.
  • 我一直面临的问题

    1.在通知访问"设置中看不到我的应用程序.

    1.Cannot see my application in 'Notification Access' settings.

    2.onCreate/onNotificationPosted没有被调用

    2.onCreate / onNotificationPosted is not getting called when I receive any Notification

    3.使用以下代码检查我的应用程序是否具有通知"权限,并返回"false"(很明显,这是我的 问题)

    3.Checked whether my application is having Notification permisson or not using the below code and it returned 'false' (Obviously, that's my problem)

    ComponentName cn = new ComponentName(getReactApplicationContext(), NotificationListener.class); String flat = Settings.Secure.getString(getReactApplicationContext() .getContentResolver(), "enabled_notification_listeners"); final boolean hasPermission = flat != null && flat.contains(cn.flattenToString()); // hasPermission - false

    由于BIND_NOTIFICATION_LISTENER_SERVICE没有列出Dangerous permissions列表,所以我认为在清单中定义它(下面提供了源供您参考)就足够了,而不是询问运行时权限.

    Since BIND_NOTIFICATION_LISTENER_SERVICE is not listed Dangerous permissions list, I thought defining it in Manifest (Source is given below for your reference) is enough instead of asking run time permission.

    我已遵循此教程,也参考了其他教程.我找不到我做错了什么.一切看起来都很完美.经过一整天的努力,我以为我会寻求您的帮助.

    I've followed this tutorial and referred other tutorials also. I can't find out where I'm doing wrong. Everything looks perfect. After scratching my mind for the whole day, I thought I'd ask your help.

    在下面找到我的源代码.

    Find my source code below.

    我的来源

    AndroidManifest.xml

    <service android:name=".NotificationListener" android:label="@string/app_name" android:permission="android.permission.BIND_NOTIFICATION_LISTENER_SERVICE"> <intent-filter> <action android:name="android.service.notification.NotificationListenerService" /> </intent-filter> </service>

    NotificationListener.java (甚至没有打印单个日志)

    NotificationListener.java (Not even single log printed)

    public class NotificationListener extends NotificationListenerService { Context context; private String TAG = this.getClass().getSimpleName(); @Override public void onCreate() { super.onCreate(); Log.d("KBT", "FROM LISTENER onCreate"); context = getApplicationContext(); } @Override public void onNotificationPosted(StatusBarNotification sbn) { Log.d("KBT", "FROM LISTENER onNotificationPosted"); String pack = sbn.getPackageName(); String ticker =""; if(sbn.getNotification().tickerText !=null) { ticker = sbn.getNotification().tickerText.toString(); } Bundle extras = sbn.getNotification().extras; String title = extras.getString("android.title"); String text = extras.getCharSequence("android.text").toString(); Intent msgrcv = new Intent("NOTIFICATION_POSTED_KBT"); msgrcv.putExtras(extras); LocalBroadcastManager.getInstance(context).sendBroadcast(msgrcv); } @Override public void onNotificationRemoved(StatusBarNotification sbn) { Log.i(TAG, "********** onNOtificationRemoved"); } }

    NotificationListenerModule.java

    public class NotificationListenerModule extends ReactContextBaseJavaModule { Context mainContext; public NotificationListenerModule(ReactApplicationContext reactContext) { super(reactContext); mainContext = getReactApplicationContext(); } @Override public String getName() { return "BatteryStatus"; } @ReactMethod public void registerNotificationEvent(Callback successCallback) { // This log is printed successfully hence this function is getting called. Log.d("KBT","registerNotificationEvent called"); // Registering Receiver LocalBroadcastManager.getInstance(mainContext).registerReceiver(myReceiver, new IntentFilter("NOTIFICATION_POSTED_KBT")); // Check Notification Permission in our app ComponentName cn = new ComponentName(getReactApplicationContext(), NotificationListener.class); String flat = Settings.Secure.getString(getReactApplicationContext().getContentResolver(), "enabled_notification_listeners"); final boolean enabled = flat != null && flat.contains(cn.flattenToString()); ] } private class NLServiceReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); JSONObject json = new JSONObject(); Set<String> keys = bundle.keySet(); for (String key : keys) { try { // json.put(key, bundle.get(key)); see edit below json.put(key, JSONObject.wrap(bundle.get(key))); } catch(JSONException e) { //Handle exception here } } // Emitting the event to React Native getReactApplicationContext() .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) .emit("onNotificationPosted", json); } } }

    日志(com.logcharge是我的软件包名称)

    Logs (com.logcharge is my package name)

    09-23 10:19:23.968 1035-1653/? E/InputDispatcher: channel '2888e2a com.logcharge/com.logcharge.MainActivity (server)' ~ Channel is unrecoverably broken and will be disposed! 09-23 10:19:24.175 2465-3354/? E/RecentsTaskLoader: Unexpected null component name or activity info: ComponentInfo{com.logcharge/com.logcharge.MainActivity}, null 09-23 10:19:24.177 2465-3354/? E/RecentsTaskLoader: Unexpected null component name or activity info: ComponentInfo{com.logcharge/com.logcharge.MainActivity}, null 09-23 10:19:24.662 2668-2668/? E/OPUtils: removeMultiApp ,com.logcharge 09-23 10:19:26.981 1035-1324/? E/ActivityManager: Failure starting process com.logcharge java.lang.SecurityException: Package com.logcharge was not found! at com.android.server.pm.PackageManagerService.checkPackageStartable(PackageManagerService.java:4350) at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:4446) at com.android.server.am.ActivityManagerService.startProcessLocked(ActivityManagerService.java:4407) at java.lang.reflect.Method.invoke(Native Method) at com.android.server.am.EmbryoHelper.startProcessLocked(EmbryoHelper.java:93) at com.android.server.am.Uterus$BirthRunnable.run(Uterus.java:720) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.os.HandlerThread.run(HandlerThread.java:65) 09-23 10:20:19.029 1035-1370/? E/PackageManager.DexOptimizer: Well this is awkward; package com.logcharge.MainApplication had UID -1 java.lang.Throwable at com.android.server.pm.PackageDexOptimizer.performDexOptLI(PackageDexOptimizer.java:150) at com.android.server.pm.PackageDexOptimizer.performDexOpt(PackageDexOptimizer.java:126) at com.android.server.pm.PackageManagerService.installPackageLI(PackageManagerService.java:19987) at com.android.server.pm.PackageManagerService.installPackageTracedLI(PackageManagerService.java:19547) at com.android.server.pm.PackageManagerService.-wrap35(Unknown Source:0) at com.android.server.pm.PackageManagerService$9.run(PackageManagerService.java:16810) at android.os.Handler.handleCallback(Handler.java:790) at android.os.Handler.dispatchMessage(Handler.java:99) at android.os.Looper.loop(Looper.java:164) at android.os.HandlerThread.run(HandlerThread.java:65) at com.android.server.ServiceThread.run(ServiceThread.java:46) 09-23 10:20:21.277 25936-25936/? E/SensorManager: sensorName:BMI160 Accelerometer,isWakeUpSensor:false,callingApp: com.logcharge,callingPid:25936,callingUid:10632 09-23 10:20:22.014 646-659/? E/cutils: Nothing there yet; let's create it: /storage/emulated/0/Android/data/com.logcharge 09-23 10:20:22.015 646-659/? E/cutils: Nothing there yet; let's create it: /storage/emulated/0/Android/data/com.logcharge/cache

    推荐答案

    这很奇怪,但经过非常仔细的操作(无需跳过任何步骤),第二天我就成功运行了

    This is weird but I've got it successfully running the next day after doing the following things very carefully (Without skipping any steps)

  • 卸载应用程序

  • Uninstall the Application

    停止/关闭本机服务器

    重命名NotificationListenerService类文件

    重新连接USB电缆(如果不是模拟器)并更改连接类型 从Charge only到Media Transfer

    Reconnect the USB cable (If not simulator) and change Connect type from Charge only to Media Transfer

    构建您的android代码

    Build your android code

    执行react-native run-android

    祈求上帝_/\ _(开个玩笑,但有帮助)

    Pray God _/\_ (Just kidding, but it helps though)

    祝你好运.

  • 更多推荐

    Android权限BIND

    本文发布于:2023-11-27 19:58:28,感谢您对本站的认可!
    本文链接:https://www.elefans.com/category/jswz/34/1639398.html
    版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
    本文标签:权限   Android   BIND

    发布评论

    评论列表 (有 0 条评论)
    草根站长

    >www.elefans.com

    编程频道|电子爱好者 - 技术资讯及电子产品介绍!