采用分區(qū)存儲只能讀寫外部共享目錄。
采用非分區(qū)存儲是可以讀寫外部存儲任何目錄的。
注意:android10在分區(qū)存儲模式下不能用文件路徑讀寫外部共享文件,但在android11在分區(qū)存儲下又可以用文件路徑讀寫外部共享文件,所以如果您的項目存在通過文件路徑來讀寫外部共享文件,要在配置文件中設(shè)置android:requestLegacyExternalStorage="true"來適配android10
1、運行在android 11上
當(dāng)targetSdkVersion<=28:
結(jié)果 Environment.isExternalStorageLegacy() 為 true,采用的是非分區(qū)存儲方法。
當(dāng)targetSdkVersion=29:
不設(shè)置android:requestLegacyExternalStorage="true"
a 應(yīng)用從非分區(qū)存儲更新,結(jié)果Environment.isExternalStorageLegacy()為 true,采用的是非分區(qū)存儲方法。
b 正常卸載安裝 結(jié)果Environment.isExternalStorageLegacy()為 flase ,采用的是分區(qū)存儲方法。
設(shè)置android:requestLegacyExternalStorage="true"
結(jié)果Environment.isExternalStorageLegacy()為 true,采用的是非分區(qū)存儲方法。
當(dāng)targetSdkVersion=30:
不設(shè)置android:preserveLegacyExternalStorage="true"
結(jié)果Environment.isExternalStorageLegacy()為 false,采用的是分區(qū)存儲方法。
設(shè)置android:preserveLegacyExternalStorage="true"
a、應(yīng)用從非分區(qū)存儲更新,結(jié)果Environment.isExternalStorageLegacy()為 true,采用的是非分區(qū)存儲方法。
b、應(yīng)用正常卸載安裝或者從分區(qū)存儲更新,結(jié)果Environment.isExternalStorageLegacy()為 flase,采用的是分區(qū)存儲方法。
2、運行在android 10上
當(dāng)targetSdkVersion<=28:
結(jié)果Environment.isExternalStorageLegacy()為 true,采用的是非分區(qū)存儲方法。
當(dāng)targetSdkVersion>=29:
不設(shè)置android:requestLegacyExternalStorage="true"
a 應(yīng)用從非分區(qū)存儲更新,結(jié)果Environment.isExternalStorageLegacy()為 true,采用的是非分區(qū)存儲方法。
b 正常卸載安裝 結(jié)果Environment.isExternalStorageLegacy()為 flase ,采用的是分區(qū)存儲方法。
設(shè)置android:requestLegacyExternalStorage="true"
結(jié)果Environment.isExternalStorageLegacy()為 true,采用的是非分區(qū)存儲方法。
3、運行在android 9及以下
采用的是非分區(qū)存儲方法