昨天往專案中添加Android自定義例外捕獲的工具類時(參考Android自定義捕獲Application全域例外)碰到一件很詭異的事情,createNewFile一直報no such file or directory,往前追發現是mkdir失敗了(mkdirs也一樣fail),網上搜了很多都說是AndroidManifest.xml中沒有配置讀寫sd卡的權限(實際上我已經配置了),最后才定位到是android10之后不能問題,
附上我最后解決問題的關鍵代碼段:
- 在AndroidManifest.xml中添加對應的權限
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS">
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
- 在使用的地方發起請求,系統會有一個彈窗,提示是否允許讀寫權限
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 222);
- 選擇彈窗的允許后,會觸發onRequestPermissionsResult這個函式,重寫這個函式,添加自己的特定需求
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (!hasAllPermissionsGranted(grantResults)) {
return;
}
switch (requestCode) {
case 222:
Toast.makeText(getApplicationContext(), "已申請權限", Toast.LENGTH_SHORT).show();
default:
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
}
之后 在需要的地方創建檔案夾,即可,
但是Android10之后Google默認不允許隨意創建檔案夾,解決方法有三個
1.使用Android規定的檔案夾做操作
2.將gradle中的編譯環境,SDK的版本號修改到29以下
3.清單檔案加入下面這句話即可隨意創建檔案夾
android:requestLegacyExternalStorage="true"
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/263861.html
標籤:其他
上一篇:動態代理及實際應用
