Android6.0 無法在SD卡建立目錄
阿新 • • 發佈:2019-02-05
摘要
今天開發中遇到一個問題,專案無法在Android6.0裝置的SD卡建立目錄,在Android6.0以下的移動裝置測試了5.0 、4.3的裝置,均正常,但是在Android6.0卻不正常。
經過排查,執行下列程式碼無法在6.0的裝置上面建立目錄
File dir = new File(DbConfig.BASE_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
衍生知識
2015年5月29日中Google I/O開發者大會,Google 釋出了 Android M,並命名為“棉花糖”(Marshmallow),對於開發者來說, Android 6.0(API 23)給開發者帶來的一些變化。
許可權管理是 Android M 最大的改變,
變化描述:
許可權管理更加精細,並且由以前的安裝時靜態授權,改為現在的執行時動態授權。
大家對 Android 的許可權吐槽已久,Android 應該能極大的改善這方面的問題。主要改變有:
系統設定中可以對 APP 各個許可權單獨控制權限根據內容進行分組了
普通許可權還是在安裝時授權,其他許可權在執行時系統彈窗授權,並且要解析使用這個許可權的目的
對於開發者來說,需要小心處理許可權相關的問題。在使用某個功能的時候,需要總是判斷是否有改許可權,並且通過合適的方式請求使用者授權。
現在描述一下處理的解決方案
1 發起讀寫裝置儲存空間的許可權
ActivityCompat.requestPermissions(AppStartActivity.this,new String[]{ android.Manifest.permission.WRITE_EXTERNAL_STORAGE},1);
2 寫許可權請求回掉函式
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
boolean writeAccepted = false;
switch (requestCode) {
case 1:
writeAccepted = grantResults[0] == PackageManager.PERMISSION_GRANTED;
break;
}
}
3 執行建立目錄程式碼
if (writeAccepted) {
String state = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(state)) {
File dir = new File(DbConfig.BASE_PATH);
if (!dir.exists()) {
dir.mkdirs();
}
}
}