본문 바로가기

Android

[18일차]퍼미션





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