Android OS 14 的 MQTT 错误:库中的“java.lang.SecurityException”

问题描述 投票:0回答:1

我的 Android 应用程序遇到问题,特别是在运行 Android OS 14 的设备上。该应用程序因与库文件相关的“java.lang.SecurityException”而崩溃。我正在使用以下库:

androidx.localbroadcastmanager:localbroadcastmanager:1.1.0
org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5
org.eclipse.paho:org.eclipse.paho.android.service:1.1.1

这是我的 AndroidManifest.xml 的片段:

<service
    android:exported="false"
    android:name="org.eclipse.paho.android.service.MqttService" />

我不确定如何解决这个问题,特别是因为它发生在库文件中。任何帮助将不胜感激。

  FATAL EXCEPTION: MQTT Rec: 10001 (Ask Studio Bot)
Process: com.boltuix.androidz, PID: 20263
java.lang.SecurityException: com.boltuix.androidz: One of RECEIVER_EXPORTED or RECEIVER_NOT_EXPORTED should be specified when a receiver isn't being registered exclusively for system broadcasts
    at android.os.Parcel.createExceptionOrNull(Parcel.java:3182)
    at android.os.Parcel.createException(Parcel.java:3166)
    at android.os.Parcel.readException(Parcel.java:3149)
    at android.os.Parcel.readException(Parcel.java:3091)
    at android.app.IActivityManager$Stub$Proxy.registerReceiverWithFeature(IActivityManager.java:5784)
    at android.app.ContextImpl.registerReceiverInternal(ContextImpl.java:1853)
    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1793)
    at android.app.ContextImpl.registerReceiver(ContextImpl.java:1781)
    at android.content.ContextWrapper.registerReceiver(ContextWrapper.java:756)
    at org.eclipse.paho.android.service.AlarmPingSender.start(AlarmPingSender.java:74)
    at org.eclipse.paho.client.mqttv3.internal.ClientState.connected(ClientState.java:1214)
    at org.eclipse.paho.client.mqttv3.internal.ClientState.notifyReceivedAck(ClientState.java:1050)
    at org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run(CommsReceiver.java:151)
    at java.lang.Thread.run(Thread.java:1012)
Caused by: android.os.RemoteException: Remote stack trace:
    at com.android.server.am.ActivityManagerService.registerReceiverWithFeature(ActivityManagerService.java:14337)
    at android.app.IActivityManager$Stub.onTransact(IActivityManager.java:2615)
    at com.android.server.am.ActivityManagerService.onTransact(ActivityManagerService.java:2798)
    at android.os.Binder.execTransactInternal(Binder.java:1496)
    at android.os.Binder.execTransact(Binder.java:1440)
android mqtt
1个回答
0
投票

经过长时间的研发终于找到了解决方案

在每个registerReceiver中添加RECEIVER_EXPORTED以供参考。

在AlarmPingSender.java文件中

找到 registerReceiver 并使用下面的内容更新该行

 service.registerReceiver(alarmReceiver, new IntentFilter(action), RECEIVER_EXPORTED);

在MqttService.java文件中

找到 registerBroadcastReceivers() 并更新这一行

registerReceiver(networkConnectionMonitor, new IntentFilter(
                ConnectivityManager.CONNECTIVITY_ACTION),RECEIVER_EXPORTED);

在 Adnroid Manifest 中添加此权限

 <uses-permission android:name="android.permission.USE_EXACT_ALARM" />
© www.soinside.com 2019 - 2024. All rights reserved.