shouldShowRequestPermissionRatonale 왜 이 퍼미션을 획득해야하는지 설명해야하는거
프로텍션 레벨 Dangerous Permission 은 개인정보와 관련된 Permission
Compat checkSelfPermission 이 퍼미션을 가지고 있는지 아닌지 획득을 해준다.ㅏ
shouldShowReqeustPermissionRationale 사용자에게 구체적으로 퍼미션 화면을 보여줌
setResult 해가지고 onRequestPermissionResult 로 결과가 넘어온다.
private void checkPermission() {
List<String> permissions = new ArrayList<>();
if (ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
}
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
permissions.add(Manifest.permission.READ_EXTERNAL_STORAGE);
}
if (permissions.size() > 0) {
boolean isShowUI = false;
for (String perm : permissions) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, perm)) {
isShowUI = true;
break;
}
}
final String[] perms = permissions.toArray(new String[permissions.size()]);
if (isShowUI) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Permission");
builder.setMessage("External Storage...");
builder.setCancelable(false);
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
ActivityCompat.requestPermissions(ExternalActivity.this, perms, RC_PERMISSION);
}
});
builder.create().show();
return;
}
ActivityCompat.requestPermissions(this, perms, RC_PERMISSION);
}
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == RC_PERMISSION) {
if (permissions != null) {
boolean granted = true;
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] != PackageManager.PERMISSION_GRANTED) {
granted = false;
}
}
if (!granted) {
Toast.makeText(this, "permission not granted", Toast.LENGTH_SHORT).show();
finish();
}
}
}
}
'Android' 카테고리의 다른 글
[20일차] Loader , ContentProvider (0) | 2016.08.12 |
---|---|
[18일차] SharedPreferences (0) | 2016.08.10 |
[18일차] 파일 (0) | 2016.08.10 |
[17일차] Glide 네트워크 상태처리, NSD (0) | 2016.08.09 |
[17일차] OkHttp 외 라이브러리들 (0) | 2016.08.09 |