我正在使用“org.eclipse.paho:org.eclipse. paho.client.mqttv3:1.2.5”进行mqtt服务,应用程序在android 12设备上不断崩溃,崩溃日志如下
java.lang.IllegalArgumentException: app id: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
Strongly consider using FLAG_IMMUTABLE, only use FLAG_MUTABLE if some functionality depends on the PendingIntent being mutable, e.g. if it needs to be used with inline replies or bubbles.
at android.app.PendingIntent.checkFlags(PendingIntent.java:382)
at android.app.PendingIntent.getBroadcastAsUser(PendingIntent.java:673)
at android.app.PendingIntent.getBroadcast(PendingIntent.java:660)
at org.eclipse.paho.android.service.AlarmPingSender.start(AlarmPingSender.java:76)
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)
这是我正在使用的库:
implementation 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.2.5'
implementation 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
6条答案
按热度按时间xqkwcwgp1#
Eclipse Paho MQTT library没有针对Android 12待定Intents进行更新。在此之前,我们可以使用this MQTT client。我建议使用gradle依赖项,而不是使用myself's answer中建议的jar文件。
在App Gradle中,注解此eclipse服务依赖性:
在当前版本为3.3.5的地方添加以下内容(& A):
不要删除Eclipse客户机依赖性,
对于导入,请删除此eclipse导入
将其替换为新的(& R):
对于MQTT android客户端,添加最后一个Ack参数,如下所示
另外,如果您在
MqttException
中使用try catch,那么您可以注解它,因为新库不需要相同的内容。wmvff8tz2#
如果你使用的是MQTT库,他们还没有为Android 12更新。所以当你使用Android 12作为目标版本时,它会在PendingIntent中抛出一个错误。作为一个临时的解决方案,我找到了一个库,他们已经升级为兼容Android 12。MQTT service library
下载“serviceLibrary-release.aar”并将其添加到您的项目中。然后从Gradle中移除“org.eclipse.paho:org.eclipse.paho.android.service:1.1.1”依赖项。无论您在使用什么,都可以使用“import info.mqtt.android.service.MqttAndroidClient”。
How to import aar file
这解决了我的MQTT库问题。
oyt4ldly3#
您需要将"挂起意向. FLAG_ONE_SHOT"或"挂起意向. FLAG_UPDATE_CURRENT"替换为"挂起意向. FLAG_UPDATE_CURRENT|挂起意向标志_IMMUTABLE "
示例:
alarmIntent =待处理意图. getBroadcast(上下文,0,新意图(上下文,自动启动接收器.类),待处理意图. FLAG_UPDATE_CURRENT|待定意向标志_IMMUTABLE);
eh57zj3b4#
这是从paho.mqtt.android库修改而来的Java library。已针对Android 12修复
lztngnrs5#
解决这个问题的最好方法是编辑源代码。为此,将所有库文件复制到项目中,然后打开AlarmPingSender.java文件,在第75行附近找到下面的代码:
将代码替换为以下代码:
现在用新的文件替换你的“import”。这样应该可以解决问题。
92vpleto6#
更新firebase库:
实现平台(“com.google.firebase:firebase-bom:29.1.0”)实现“com.google.firebase:firebase-消息传递”
并删除实现“com.google.firebase:firebase消息传递:23.0.0”