[ Android ] 안드로이드 권한 처리하기

2019. 12. 23. 12:13Android

728x90
반응형
SMALL

참고 : https://developers-kr.googleblog.com/2015/08/android-60-sdk.html

 

안드로이드 마시멜로: 안드로이드 6.0 SDK 와 마지막 개발자 프리뷰

By Jamal Eason , Product Manager, Android 말랑 말랑한 마시멜로를 싫어하는 분이 있을까요? 분명히 말씀드리자면 안드로이드 팀은 마시멜로를 정말 좋아합니다.  5월 구글 I/O 에서 안드로이드 M 개발자 프리뷰 ...

developers-kr.googleblog.com

https://ahnbk.com/?p=731e

 

안드로이드 앱 여러 개 권한 요청

앱을 설치하고 처음 실행시 여러 개의 권한 요청 방법. requestPermissions 함수를 사용하는데, 두번째 인자인 퍼미션 목록은 String Array 타입이다. 즉 여러 개의 권한을 한꺼번에 요청 가능. 필요한 권한 목록을 ArrayList에 저장하고, 목록이 완성되면 requestPermissions을 이용해 권한…

ahnbk.com

 

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
반응형