1、問題描述
今天在使用統一掃碼SDK時,打開掃碼界面之後停留了幾秒,然後發現應用出現了崩潰現象,使用的移動設備是華爲手機,系統是Android 12的系統,使用的API版本是31,崩潰日誌如下圖所示:
詳細的報錯日誌貼在下方:
Html 代碼
2、問題分析
我們首先從日誌上整體看下來,並沒有涉及到具體的業務部分,根據日誌我們可以初步判斷這個崩潰應該是觸發了系統的某個行爲機制導致的,是屬於系統行爲。
然後結合這個異常信息:SecurityException: getDataNetworkTypeForSubscriber,我們去查找相關的資料看看這個異常究竟是什麼就OK了。
getDataNetworkTypeForSubscriber:該異常是獲取設備網絡類型異常。
造成這個異常的原因是:在Android 11及其以上版本在獲取設備網絡類型時需要獲取READ_PHONE_STATE權限,如果您的工程或者是第三方庫沒有聲明READ_PHONE_STATE權限,由於該權限問題就會造成應用閃退。
3、解決方案
針對以上這個問題,我總結了以下三種解決方案,您可以針對自身的實際情況,選擇自己認爲最方便的一種方式進行使用,當然,我個人比較推薦的是第三種方案,下面跟着我一起來了解一下這三種方案的具體實現吧!
一、將項目的targetSdkVersion由30降到29及以下版本
即:將項目的目標設備版本調低(臨時解決方案,不推薦)
二、升級第三方庫
即:由第三方庫內部處理該異常,因此需要升級第三方庫的版本,但是這種操作需要協調第三方庫的開發資源,如果第三方庫已經不維護了,那麼這種方案也不行了。
三、應用自身申請READ_PHONE_STATE權限
即:在AndroidManifest.xml文件中聲明READ_PHONE_STATE權限,然後在代碼中動態申請該權限:
OK,通過上面的方法,我們就可以完美的解決這個問題了!
欲瞭解更多更全技術文章,歡迎訪問https://developer.huawei.com/consumer/cn/forum/?ha_source=zzh