在android X(安卓10版本)运行创建父文件夹失败,解决办法
適配安卓X版本時,發現很多權限申請后無法達到應有的效果。
例如:申請了內存的讀寫權限,但是還是無法創建父文件夾。
查閱了一下開發文檔:
getExternalStorageDirectory()-在API級別29中不推薦使用此方法。為了提高用戶隱私,不建議直接訪問共享/外部存儲設備。
當應用程序定位到Build.VERSION_CODES.Q時,此方法返回的路徑不再可供應用程序直接訪問。
通過遷移到Context#getExternalFilesDir(String),MediaStore或Intent#ACTION_OPEN_DOCUMENT之類的替代方案,應用程序可以繼續訪問共享/外部存儲中存儲的內容。
getExternalFilesDir(null)將返回您的應用存儲文件夾,位于(內部存儲)/Android/data/your.app.name/file/
10.0之前的不變,所以需要做一下判斷:
public static String getSDPath(Context context) {
File sdDir = null;
boolean sdCardExist = Environment.getExternalStorageState().equals(
Environment.MEDIA_MOUNTED);// 判斷sd卡是否存在
if (sdCardExist) {
if (Build.VERSION.SDK_INT>=29){
//Android10之后
sdDir = context.getExternalFilesDir(null);
}else {
sdDir = Environment.getExternalStorageDirectory();// 獲取SD卡根目錄
}
} else {
sdDir = Environment.getRootDirectory();// 獲取跟目錄
}
return sdDir.toString();
}
Android 10 改變了文件的存儲方式不允許應用隨意創建文件夾了,要用安卓提供的文件夾。
Android 10提供了一些文件夾:
例如:Context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS),這個路徑是在SD卡的Android目錄下的data目錄下的自己應用包下的files目錄下的 Environment.XXX,Environment.XXX代表的意思如下圖
解決辦法:
1.使用android自帶功能解決
2.把targetSdkVersion 改為29之下(如果你的 應用 compileSdkVersion 為29 并且targetSdkVersion為29,就會使用29的最新源碼編譯和運行,如果降低targetSdkVersion在系統源碼運行的時候就會找到相應的targetSdkVersion版本的源碼這樣就相當于繞過了Android 10新特性。)
3.可以在Androidmainfest 里面的application添加:android:requestLegacyExternalStorage=“true”
總結
以上是生活随笔為你收集整理的在android X(安卓10版本)运行创建父文件夹失败,解决办法的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Cisco网络优化、监测和故障排除考试答
- 下一篇: Android移动开发-调用步行检测和步