명세서에 설정되지 않은 권한이 필요한 기능을 사용하면 무자비한 보안 예외(SecurityException)가 발생합니다.
너무 무자비해서 캐치 조항을 통과한다.
이 예외가 발생한다는 것은 명세서와 코드가 일치하지 않으므로 코드를 수정해야 한다는 뜻입니다!
코드에서 권한과 조건부 분기(conditional branching)를 확인하고 싶을 수도 있습니다.
예를 들어, 도서관으로 출판하는 경우.
그래서 권한이 목록과 명세서에 해당 권한이 존재하는지 확인하는 메서드를 제공합니다.
[코드 lang="java" light="true"]
/**
* 명시된 권한이 명단에 명시되어 있는지 확인하세요.
*
* @param 확인 허가 조사 허가
* @param 맥락
* 참: 목록에 @return / 거짓: 목록에 없음
*/
public boolean hasPermission(String checkPermission, Context context) {
만약 (checkPermission == null || context == null) {
논거가 통과되지 않은 사건들
return false;
}
String[] requestedPermissions = getPermissionList(context);
if (requestedPermissions == null) {
명세서에 허가가 설정되어 있지 않을 때
return false;
}
for (String str : requestedPermissions) {
만약 (str.equals(checkPermission)) {
조사 허가가 있었던 사례들
진짜로 반환;
}
}
조사 허가가 존재하지 않는 경우들
return false;
}
/**
* 명세서에 나열된 권한 목록을 반환합니다.
*
* @return 권한 목록
*/
public String[] getPermissionList(Context context) {
PackageManager packageManager = context.getPackageManager();
PackageInfo packageInfo = null;
시도해 {
packageInfo = packageManager.getPackageInfo(context.getPackageName(), PackageManager.GET_PERMISSIONS);
} catch (NameNotFoundException e) {
null을 반환;
}
패키지 반환 정보.requested권한이 있습니다;
}
[/코드]
작동 원리
[코드 lang="java" light="true"]
문자열 검사 Permisson = "android.permission.READ_PHONE_STATE";
if (hasPermission(checkPermisson, context)) {
Log.d("TAG", checkPermisson + " exist!");
} 그렇지 않으면 {
Log.d("TAG", checkPermisson + "not exist!");
}
[/코드]
도움이 되었길 바랍니다.