適配Android 9.0相關問題總結

1.相機拍照崩潰(Android7.0引入“私有目錄被限制訪問”,“StrictModeAPI政策”)

解決方法 :首先在manifast中創(chuàng)建一個provider

然后在打開相機的地方根據(jù)設備版本處理:

2.MODE_WORLD_READABLE模式廢棄(SharedPreferences模式)

解決方法:使用MODE_PRIVATE模式。

3.獲取以content開頭的文件拿不到正確路徑。

? 目前并沒有出現(xiàn)此問題。

4.Api8.0以上版本升級無法跳轉安裝頁面

? 解決方法:首先在manifast中增加一個權限

在安裝apk的地方把?? Intent intent = newIntent(Intent.ACTION_VIEW)

改為:Intent intent = newIntent(Intent.ACTION_INSTALL_PACKAGE);

5.解析包安裝失敗

?解決方法:安裝時把

intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK)這句話放在

intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)下面

6.通知欄不顯示

?解決方法:


7.隱式廣播限制

??安卓8.0對廣播進行了限制 接收廣播消耗資源 如果多個應用注冊了系統(tǒng)廣播 會持續(xù)消耗資源。

? 解決方案

? 如果是注冊系統(tǒng)廣播 不要在清單文件中注冊了 要根據(jù)自己的需要在代碼中注冊 比如少兒項目 清單文件中注冊了個像 監(jiān)聽網(wǎng)絡變化 和 投屏監(jiān)聽網(wǎng)絡的廣播 這些都可以在項目開啟時動態(tài)注冊

? 如果是自定義廣播 盡量也要動態(tài)注冊 如果實在需要靜態(tài)注冊 可以嘗試在發(fā)送的時候攜帶 intent.addFlags(0x01000000);

8.低電耗模式和應用待機模式限制

? 8.0系統(tǒng)待機一段時間后會進入低電量模式 低電量模式下鬧鐘類AlarmManager功能會受到影響 如果用到了這個類 解決方案如下

? 設置鬧鐘時使用setInexactRepeating這個方法也是設置重復鬧鐘 他會把幾個時間差不多的鬧鐘合并成一個執(zhí)行 相對來說更省電 如果還是不行的話就要申請電池白名單

PowerManager powerManager = (PowerManager) activity.getSystemService(Context.POWER_SERVICE);

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

//判斷應用是否在去除低電耗的白名單中

??? if (!powerManager.isIgnoringBatteryOptimizations(activity.getPackageName())) {

//申請白名單 啟動一個ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS 意圖intent

??????? Intent intent = new Intent(Settings.ACTION_IGNORE_BATTERY_OPTIMIZATION_SETTINGS);

??????? activity.startActivity(intent);

??? }

}

9.關閉分屏功能

在清單文件的 <activity>或 <application>節(jié)點中設置該屬性,啟用或禁用多窗口顯示

android:resizeableActivity="false"? //關閉分屏功能

android:resizeableActivity="true"? //開啟分屏功能

10.權限的動態(tài)申請(具體文檔請參照文案文檔)

??使用easyPermission動態(tài)申請權限。

? 需要申請的權限:

? 相機權限,讀、寫內存權限和獲取手機信息權限。

拍攝照片和錄制視頻的權限,

權限名字位置拒絕后的影響

相機權限掃一掃不能使用掃一掃功能

相機權限和讀寫手機內存權限更換頭像不能更換頭像

獲取手機信息請求頭、公共參數(shù)、搜索列表參數(shù)、關于頁面的排查日志無影響

讀寫手機內存權限下載視頻不能下載

讀寫手機內存權限下載圖片不能下載

定位權限投屏無影響

相機權限和讀寫手機內存權限H5上傳圖片或視頻不能上傳

11.Api9.0以上org.apache.http.legacy 庫被移除

從Android P開始,org.apache.http.legacy庫將從 bootclasspath 中刪除

若要繼續(xù)使用在清單文件application節(jié)點里添加如下代碼:

<uses-library

android:name="org.apache.http.legacy"

android:required="false" />

12.Api9.0以上禁止 App 使用所有未加密的連接

在Android P系統(tǒng)的設備上,如果應用使用的是非加密的明文流量的http網(wǎng)絡請求,則會導致該應用無法進行網(wǎng)絡請求,https則不會受影響,同樣地,如果應用嵌套了webview,webview也只能使用https請求。

解決方法:

在res文件夾下創(chuàng)建一個xml文件夾,然后創(chuàng)建一個network_security_config.xml文件,文件內容如下

<?xml version="1.0" encoding="utf-8"?>

<network-security-config>

<base-config cleartextTrafficPermitted="true" />

<network-security-config>

接著,在AndroidManifest.xml文件下的application標簽增加以下屬性:

android:networkSecurityConfig="@xml/network_security_config"

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

友情鏈接更多精彩內容