[ Android ] 안드로이드 권한 처리하기
2019. 12. 23. 12:13ㆍAndroid
728x90
반응형
SMALL
참고 : https://developers-kr.googleblog.com/2015/08/android-60-sdk.html
AndroidManifest.xml에서 다음과 같이 targetSdkVersion을 23(마시멜로) 이상으로 하게 되면 권한 부여 방식이 바뀌게 됩니다.
기존에는 설치 시 권한 동의를 얻은 후 설치가 진행되었지만,
마시멜로 이상부터는 구동 중에 사용자에게 권한 허용 여부를 물어서 앱의 권한을 획득하거나 설정 - 앱 - 권한에 들어가서 일일이 허용으로 체크해줘야 합니다.
<uses-sdk
android:minSdkVersion="18"
android:targetSdkVersion="23"/>
권한을 획득하지 않고 권한이 필요한 동작을 하게 되면 SecurityException 에러와 함께 앱이 종료됩니다.
사용자에게 권한 승인 여부를 묻는 방법은 다음과 같습니다.
안드로이드
public class MainActivity extends Activity{
final int REQUEST_CAMERA = 1001;
final int REQUEST_MULTI = 1010;
ArrayList<String> permissions = new ArrayList<String>();
boolean checkPermission(String str){
int permissionCheck = ContextCompat.checkPermission(str);
if(permissionCheck!=PackageManager.PERMISSION_GRANTED)
return true;
return false;
}
@Override
protected void onCreate(){
}
@JavascriptInterface
public void grantAuthority(String str){
permissions.clear();
switch(str){
case "CAMERA" : {
if(checkPermission(Manifest.permission.CAMERA))
permissions.add(Manifest.permission.CAMERA);
if(permissions.size() > 0){
String[] reqPermissionArray = new String[permissions.size()];
reqPermissionArray = permissions.toArray(reqPermissionArray);
requestPermissions(reqPermissionArray, REQUEST_CAMERA);
}else{
//권한이 모두 승인되어 있을 경우 처리
}
break;
}
}
}
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults){
switch(requestCode){
case REQUEST_CAMERA : {
if(grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED){
Toast.makeText(this, "권한이 허용되었습니다.", Toast.LENGTH_LONG).show();
//사용자가 권한을 허용하지 않았을 경우 처리
}else{
Toast.makeText(this, "권한이 허용되었습니다.", Toast.LENGTH_LONG).show();
//사용자가 권한을 허용하였을 경우 처리
}
return;
}
case REQUEST_MULTI : {
int grantSize = grantResults.length;
boolean isTrue = true;
for(int i=0; i<grantSize; i++)
if(grantResults[i] != PackageManager.PERMISSION_GRANTED){
isTrue = false;
break;
}
if(grantResults.length > 0 && isTrue){
Toast.makeText(this, "권한이 허용되었습니다.", Toast.LENGTH_LONG).show();
//사용자가 권한을 허용하지 않았을 경우 처리
}else{
Toast.makeText(this, "권한이 허용되었습니다.", Toast.LENGTH_LONG).show();
//사용자가 권한을 허용하였을 경우 처리
}
return;
}
}
}
}
자바스크립트
window.android.grantAuthority("CAMERA");
728x90
반응형
'Android' 카테고리의 다른 글
[ Android ] 안드로이드 코르도바 뒤로가기 처리 (0) | 2021.02.25 |
---|---|
[ Android ] 안드로이드 웹뷰 net::ERR_CACHE_MISS 해결 방법 (0) | 2019.12.23 |
[ Android ] a webview method was called on thread 'javabridge' (0) | 2019.12.19 |
[ Android ] 앱의 WebView SSL 오류 핸들러 알림 해결 방법 (0) | 2019.12.09 |
[ Android ] 자바스크립트 인터페이스 삽입 취약점 문제 해결 하기 (0) | 2019.12.06 |