program start 시에 필요한 permission 물어보고 받아 내기, 실수로 거부되었을 경우 다시 물어보는 logic 있음
refer to myHolyBible.apk
askPermission();
ArrayList<String> permissions = new ArrayList<>();
private final static int ALL_PERMISSIONS_RESULT = 101;
ArrayList<String> permissionsToRequest;
ArrayList<String> permissionsRejected = new ArrayList<>();
private void askPermission() {
permissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
permissions.add(Manifest.permission.INTERNET);
permissions.add(Manifest.permission.RECORD_AUDIO);
permissions.add(Manifest.permission.ACCESS_NETWORK_STATE);
permissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
permissions.add(Manifest.permission.CAMERA);
permissions.add(Manifest.permission.MODIFY_AUDIO_SETTINGS);
permissionsToRequest = findUnAskedPermissions(permissions);
if (permissionsToRequest.size() != 0) {
requestPermissions(permissionsToRequest.toArray(new String[0]),
ALL_PERMISSIONS_RESULT);
}
}
private ArrayList findUnAskedPermissions(@NonNull ArrayList<String> wanted) {
ArrayList <String> result = new ArrayList<String>();
for (String perm : wanted) if (hasPermission(perm)) result.add(perm);
return result;
}
private boolean hasPermission(@NonNull String permission) {
return (checkSelfPermission(permission) != PackageManager.PERMISSION_GRANTED);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
if (requestCode == ALL_PERMISSIONS_RESULT) {
for (String perms : permissionsToRequest) {
if (hasPermission(perms)) {
permissionsRejected.add(perms);
}
}
if (permissionsRejected.size() > 0) {
if (shouldShowRequestPermissionRationale(permissionsRejected.get(0))) {
String msg = "These permissions are mandatory for the application. Please allow access.";
showDialog(msg);
}
}
// else
// Toast.makeText(mContext, "Permissions not granted.", Toast.LENGTH_LONG).show();
}
}
private void showDialog(String msg) {
showMessageOKCancel(msg,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
requestPermissions(permissionsRejected.toArray(
new String[0]), ALL_PERMISSIONS_RESULT);
}
});
}
private void showMessageOKCancel(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(mActivity)
.setMessage(message)
.setPositiveButton("OK", okListener)
.setNegativeButton("Cancel", null)
.create()
.show();
}
'android source ' 카테고리의 다른 글
Do Not Disturb Access 피하기 (0) | 2020.01.25 |
---|---|
Delayed exit application (0) | 2020.01.16 |
onSwipeTouchListener (0) | 2020.01.04 |
get physical screen width dots (0) | 2020.01.03 |
shared preference save, get (0) | 2019.10.10 |