最近使用mqtt庫,測試的時候發(fā)現(xiàn)在Android12及以下正常,但在13上閃退,閃退日志如下
java.lang.IllegalArgumentException: com.yummo.xcar: Targeting S+ (version 31 and above) requires that one of FLAG_IMMUTABLE or FLAG_MUTABLE be specified when creating a PendingIntent.
提示很明顯是version 31版本在創(chuàng)建PendingIntent的時候需要做適配,于是全局搜索把適配代碼加上,代碼如下
PendingIntent pendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
pendingIntent = PendingIntent.getBroadcast(getApplication().getApplicationContext(), 0, activityIntent, PendingIntent.FLAG_IMMUTABLE | PendingIntent.FLAG_UPDATE_CURRENT);
} else {
pendingIntent = PendingIntent.getBroadcast(getApplication().getApplicationContext(), 0, activityIntent, PendingIntent.FLAG_UPDATE_CURRENT);
}
加上之后還是報同樣的錯誤,幾經(jīng)周折才發(fā)現(xiàn)mqtt庫里也用到了PendingIntent且沒有做適配,我所使用的mqtt版本如下:
api "org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0"
api "org.eclipse.paho:org.eclipse.paho.android.service:1.1.1"
本想著去官方庫里看下有沒有最新的已經(jīng)適配的庫,去了官網(wǎng)才發(fā)現(xiàn)最后一個版本已停留在2017年,痛苦~,官網(wǎng)鏈接:mqtt-service,找了好久~好在后面找到一篇文章找到了替代方案:兼容方案,具體替換方式參考該鏈接吧,替換庫的下載地址,替換完成后將舊的引用包刪除并重新導(dǎo)入進(jìn)行編譯,結(jié)果又報了另外一個庫找不到,于是我又根據(jù)日志添加了對應(yīng)的依賴庫
api 'com.jakewharton.timber:timber:4.7.1'
重新編譯后終于可以了?。?!文章來源:http://www.zghlxwxcb.cn/news/detail-732143.html
但是該庫創(chuàng)建的mqttservice銷毀再重建時會有數(shù)據(jù)庫異常導(dǎo)致的閃退問題,需要注意,最后總算是解決了,網(wǎng)上關(guān)于mqtt適配高版本的文章太少了,希望能給遇到同樣問題的朋友一點幫助文章來源地址http://www.zghlxwxcb.cn/news/detail-732143.html
到了這里,關(guān)于Android框架mqtt庫無法兼容高版本android13的問題的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!