gpt4 book ai didi

Android 权限 BIND_NOTIFICATION_LISTENER_SERVICE 不工作

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:12 25 4
gpt4 key购买 nike

我在 React Native 应用程序中工作。我正在努力在 Android 中使用 Notification ServicesBIND_NOTIFICATION_LISTENER_SERVICE。我正在尝试使用 NotificationListenerService 读取传入的通知。

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

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

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

2.Re-install/Re-build the application

  1. Renaming the NotificationListenerService class file and run Etc..

我一直面临的问题,

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

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

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 列表,我认为在 Manifest 中定义它(下面给出了源供您引用)就足够了,而不是询问运行时权限。

我关注了this教程并引用了其他教程。我找不到我做错的地方。一切看起来都很完美。在绞尽脑汁一整天后,我想我会请求你的帮助。

在下面找到我的源代码。

感谢您的时间和耐心。 (:

我的来源

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(甚至没有打印单个日志)

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);
}
}
}

Logs(com.logcharge 是我的包名)

    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

最佳答案

这很奇怪,但在非常仔细地执行以下操作(不跳过任何步骤)后,我在第二天成功运行了它

  1. 卸载应用程序

  2. 停止/关闭 React native 服务器

  3. 重命名 NotificationListenerService 类文件

  4. 重新连接 USB 数据线(如果不是模拟器)并更改连接类型从 Charge onlyMedia Transfer

  5. 构建您的 android 代码

  6. 执行react-native run-android

  7. 祈祷上帝 _/\_(开玩笑,但它有帮助)

祝你好运。

关于Android 权限 BIND_NOTIFICATION_LISTENER_SERVICE 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52456992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com