Android7.0 SDcard無法建立資料夾解決辦法
阿新 • • 發佈:2019-02-16
1. 背景
Android開發過程中,需要在SDcard目錄內建立資料夾並建立檔案儲存內內容,首先在AndroidManifest.xml中加入相關許可權
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
在建立資料夾的地方主需要呼叫mkdir或mkdirs即可建立對應資料夾
File file = new File(dirPath);
if(!file.exists()) {
file.mkdirs();//多級目錄
}
但是此方法在部分Android7.0手機上無效,執行程式後既無法建立對應的資料夾,程式也不會丟擲異常。
2. 解決方式
直接設定方法
在手機設定->應用管理內找到對應app,在應用許可權列表內,為應用開啟“讀取、寫入或刪除儲存空間”許可權。不同手機可能此許可權設定位置不一樣,但都是可設定的。
程式碼中檢查
檢查對應許可權,若許可權未開啟則彈窗請求許可權(例子中為檢查和請求SDcard寫許可權和相機許可權)
final private int REQUEST_CODE_ASK_PERMISSIONS = 123;
public void checkPermission() {
if(Build.VERSION.SDK_INT >= 23) {
List<String> permissionStrs = new ArrayList<>();
int hasWriteSdcardPermission =
ContextCompat.checkSelfPermission(
WTMainActivity.this ,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
if(hasWriteSdcardPermission !=
PackageManager.PERMISSION_GRANTED) {
permissionStrs.add(
Manifest.permission.WRITE_EXTERNAL_STORAGE
);
}
int hasCameraPermission = ContextCompat.checkSelfPermission(
WTMainActivity.this,
Manifest.permission.CAMERA);
if(hasCameraPermission != PackageManager.PERMISSION_GRANTED) {
permissionStrs.add(Manifest.permission.CAMERA);
}
String[] stringArray = permissionStrs.toArray(new String[0]);
if (permissionStrs.size() > 0) {
requestPermissions(stringArray,
REQUEST_CODE_ASK_PERMISSIONS);
return;
}
}
}
//許可權設定後的回撥函式,判斷相應設定,requestPermissions傳入的引數為幾個許可權,則permissions和grantResults為對應許可權和設定結果
@Override
public void onRequestPermissionsResult(int requestCode,
@NonNull String[] permissions, @NonNull int[] grantResults) {
switch(requestCode) {
case REQUEST_CODE_ASK_PERMISSIONS :
//可以遍歷每個許可權設定情況
if(grantResults[0]== PackageManager.PERMISSION_GRANTED) {
//這裡寫你需要相關許可權的操作
}else{
Toast.makeText(MainActivity.this,
"許可權沒有開啟",Toast.LENGTH_SHORT).show();
}
}
super.onRequestPermissionsResult(requestCode, permissions,
grantResults);
}