1. 권한 설정하기
권한 설정을 위해선 AndroidManifest.xml에 등록을 해야한다.
이 중 위험 권한의 경우 체크를 통해 사용자의 동의가 필요하다.
위험권한 종류 : https://developer.android.com/guide/topics/security/permissions?hl=ko
ex) <uses-permission android:name="android.permission.CAMERA"/>
2.권한 요청
단일 권한에 대해선
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.CAMERA)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.CAMERA)) {
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.CAMERA},
MY_PERMISSIONS_REQUEST_CAMERA);
}
}
위와 같은 방식으로 요청한다. 다만 실제 앱개발 상황에서는 위험권한이 한 개뿐일리 없으므로 리스트에 넣어서 한 번에 하는것이 편리하다. (출처: https://bottlecok.tistory.com/49 [잡캐의 IT 꿀팁])
public static void checkAllPermission(Context context, int requestCode){
PackageInfo packageInfo = null;
String[] requestedPermissions = null;
ArrayList<String> arrNeedPermissions = new ArrayList<>();
// 설정된 권한들 리스트화
try {
packageInfo = context.getPackageManager().getPackageInfo(context.getPackageName(),
PackageManager.GET_PERMISSIONS);
requestedPermissions = packageInfo.requestedPermissions;
} catch (PackageManager.NameNotFoundException e) {
e.printStackTrace();
}
// 그 중에서 권한 부여 안 된것들 리스트화
for(int i = 0; i < requestedPermissions.length; i++){
if(DANGEROUS_PERMISSIONS.contains(requestedPermissions[i])) {
if (ContextCompat.checkSelfPermission(context, requestedPermissions[i]) !=
PackageManager.PERMISSION_GRANTED) {
arrNeedPermissions.add(requestedPermissions[i]);
}
}
}
String[] arr = new String[arrNeedPermissions.size()];
// 리스트화된 권한들 요청
if(arrNeedPermissions.isEmpty()){
arr = new String[]{ALL_PERMISSION_GRANT};
} else {
arr = (String[]) arrNeedPermissions.toArray(arr);
}
ActivityCompat.requestPermissions((AppCompatActivity) context, arr, requestCode);
}
사용자가 팝업에 대한 처리를 끝마치면
onRequestPermissionsResult()메소드 쪽으로 들어온다.
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
if (requestCode == PERMISSION_CHECK) {
boolean isAllPermissionsGrant = true;
for (int i = 0; i < grantResults.length; i++) {
if (PermissionCheck.ALL_PERMISSION_GRANT.equals(permissions[i])) {
break;
}
if (grantResults[i] == -1) {
isAllPermissionsGrant = false;
break;
}
}
if (isAllPermissionsGrant) {
doStart();
} else {
finish();
}
}
}
이후의 처리는 상황에 맞게 하면 될 것이다.
연락처 및 이미지 공유 가능하도록 설정하기2 (0) | 2020.07.24 |
---|---|
연락처 및 이미지 공유 가능하도록 설정하기1 (0) | 2020.07.23 |