[안드로이드 개발 포인트] 안드로이드 6.0 이상 버전에서 외부 저장 권한을 읽을 수 없는 문제 해결
5123 단어 안드로이드 개발 포인트
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
확실히 그렇지만 이렇게 해서는 위의 문제를 해결할 수 없다.안드로이드 6.0 이상의 시스템에서는 이러한 방법이 통하지 않습니다. 그러면 우리는 어떻게 해야만 이런 권한을 얻을 수 있습니까?
우선 안드로이드 매니페스트에서xml은 위의 두 가지 권한을 등록하고 PermissionUtils라는 클래스를 정의합니다.
package com.kaipingzhou.signer.utils;
import android.Manifest;
import android.app.Activity;
import android.content.pm.PackageManager;
import android.os.Build;
/**
* Created by on 2017/4/2 22:43.
* qq [email protected]
* : Android 6.0
*/
public class PermissionUtils {
private static String[] PERMISSIONS_CAMERA_AND_STORAGE = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.CAMERA};
/**
* 6.0
*
* @param activity
* @param requestCode
* @return
*/
public static boolean isGrantExternalRW(Activity activity, int requestCode) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int storagePermission = activity.checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE);
int cameraPermission = activity.checkSelfPermission(Manifest.permission.CAMERA);
if (storagePermission != PackageManager.PERMISSION_GRANTED ||
cameraPermission != PackageManager.PERMISSION_GRANTED) {
activity.requestPermissions(PERMISSIONS_CAMERA_AND_STORAGE, requestCode);
return false;
}
}
return true;
}
}
다음은 가장 중요한 단계입니다. 위의 코드를 호출합니다. 다음은 제가 예를 하나 드리겠습니다. 다른 것은 모두 유사합니다.
if (PermissionUtils.isGrantExternalRW(LoginActivity.this, 1)) {
//
Login(loginId, loginPsd);
}
참고: 이 방법으로는 충분하지 않습니다. onRequestPermissionsResult() 메서드를 다시 작성해야 합니다.
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
switch (requestCode) {
case 1:
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
Login(loginId, loginPsd);
} else {
runOnUiThread(new Runnable() {
@Override
public void run() {
ToastUtil.showToast(getApplicationContext(), " ~");
}
});
}
break;
}
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
이렇게 하면 안드로이드 6.0과 그 이상의 버전에서 외부 저장 권한을 읽을 수 없는 문제를 완벽하게 해결할 수 있다.