private static final int MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE = 1;
private boolean mExternalStorageAvailable = false;
private boolean mExternalStorageWriteable = false;
还要注意的是需要在AndroidManifest.xml中添加
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
在 application中添加
android:requestLegacyExternalStorage="true"
private void checkGetPermission() {
String externalStorageState = Environment.getExternalStorageState();
if (Environment.MEDIA_MOUNTED.equals(externalStorageState)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = true;
Log.d("getPermission","all");
} else if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(externalStorageState)) {
mExternalStorageAvailable = true;
mExternalStorageWriteable = false;
Log.d("getPermission","one of all");
} else {
mExternalStorageAvailable = mExternalStorageWriteable = false;
Log.d("getPermission","no one");
}
handleExternalStorageState(mExternalStorageAvailable,mExternalStorageWriteable);
}
private void handleExternalStorageState(boolean mExternalStorageAvailable, boolean mExternalStorageWriteable) {
if(mExternalStorageAvailable && mExternalStorageWriteable){
int permissionCheck = ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE);
Log.d("permission", "permissionCheck=="+permissionCheck);
if (permissionCheck != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
new AlertDialog.Builder(this)
.setMessage("您拒绝过授予访问外部存储设备的权限,但是只有申请该权限,才能往外部存储设备写入数据,你确定要重新申请获取权限吗?")
.setPositiveButton("ok", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
//again request permission
ActivityCompat.requestPermissions(MainActivity.this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
})
.setNegativeButton("no", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.create()
.show();
} else {
// No explanation needed, we can request the permission.
Log.d("ActivityCompat","else");
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},
MY_PERMISSIONS_REQUEST_WRITE_EXTERNAL_STORAGE);
}
}else{
//had granted
Log.d("else","run writeDatasToExternalStorage() method");
}
}else{
Log.d("permission", "ExternalStorage can not be write or unAvailable");
}
}