一、在AndroidManifest.xml中加入android:requestLegacyExternalStorage="true" ,如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest package="com.xxx"
xmlns:android="http://schemas.android.com/apk/res/android">
<uses-permission android:name="android.permission.READ_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_CONTACTS"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:requestLegacyExternalStorage="true"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity
android:name=".xxActivity"
android:label="@string/app_name"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
</application>
</manifest>
二,動態申請權限
private void initPermission(Activity activity){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED
||ContextCompat.checkSelfPermission(activity, Manifest.permission.READ_SMS) != PackageManager.PERMISSION_GRANTED
) {
// 檢查權限狀態
if (ActivityCompat.shouldShowRequestPermissionRationale(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 用戶徹底拒絕授予權限
} else {
// 用戶未徹底拒絕授予權限
ActivityCompat.requestPermissions(activity, PermissionUtil.PERMISSIONS, PermissionUtil.REQUEST);
}
}else{
Toast.makeText(activity,"已經授權 : "+Manifest.permission.WRITE_EXTERNAL_STORAGE,Toast.LENGTH_SHORT).show();
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
for (int i=0;i<grantResults.length;i++ ) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
// 申請成功
Toast.makeText(BackupAndRecoverContactActivity.this,"申請成功 : "+ PermissionUtil.PERMISSIONS[i],Toast.LENGTH_SHORT).show();
} else {
// 申請失敗
Toast.makeText(BackupAndRecoverContactActivity.this,"申請失敗 : "+PermissionUtil.PERMISSIONS[i],Toast.LENGTH_SHORT).show();
}
}
}
}
public class PermissionUtil {
public static final int REQUEST = 1;
public static String[] PERMISSIONS = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_SMS};
}