1、手動申請
Android6.0之后系統(tǒng)對權(quán)限的管理更加嚴(yán)格了,不但要在AndroidManifest中添加,還要在應(yīng)用運(yùn)行的時(shí)候動態(tài)申請。下面是動態(tài)申請SD卡讀寫的權(quán)限
在AndroidManifest中添加SD卡讀寫的權(quán)限
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
動態(tài)申請權(quán)限
private static final int REQUEST_EXTERNAL_STORAGE = 1;
private static String[] PERMISSIONS_STORAGE = {
"android.permission.READ_EXTERNAL_STORAGE",
"android.permission.WRITE_EXTERNAL_STORAGE" };
public static void verifyStoragePermissions(Activity activity) {
try {
//檢測是否有寫的權(quán)限
int permission = ActivityCompat.checkSelfPermission(activity,
"android.permission.WRITE_EXTERNAL_STORAGE");
if (permission != PackageManager.PERMISSION_GRANTED) {
// 沒有寫的權(quán)限,去申請寫的權(quán)限,會彈出對話框
ActivityCompat.requestPermissions(activity, PERMISSIONS_STORAGE,REQUEST_EXTERNAL_STORAGE);
}
} catch (Exception e) {
e.printStackTrace();
}
}
把verifyStoragePermissions方法放在onCreate方法中即可。
2、默認(rèn)申請
https://github.com/Karumi/Dexter
通過上面庫,接入方式:
在build.gradle加入
dependencies{
implementation 'com.karumi:dexter:5.0.0'
}
然后在mainactivity加入
static final String[] PERMISSIONS = new String[]{
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,
};
private void initPermissions() {
Dexter.withActivity(this).withPermissions(PERMISSIONS)
.withListener(new MultiplePermissionsListener() {
@Override
public void onPermissionsChecked(MultiplePermissionsReport report) {
if (report.areAllPermissionsGranted()){
Toast.makeText(getApplication(),"權(quán)限獲取成功!",Toast.LENGTH_LONG).show();
}
}
@Override
public void onPermissionRationaleShouldBeShown(List<PermissionRequest> permissions, PermissionToken token) {
}
}).check();
}
然后在oncreate()中加入initPermissions()就行了
以上兩種方法,親測可用。