Android - 안드로이드 앱 권한 설정

Code April·2022년 5월 1일
0

안드로이드

목록 보기
1/5

모든 안드로이드 앱은 전용 공간을 가지며, 해당 공간 외부에 있는
리소스나 정보를 사용해야 하는 경우,필요한 권한을 설정 해야 합니다.
런타임 권한의 경우 사용자의 승인을 위한 별도의 요청이 필요 합니다.
별도의 요청이란 앱 실행 시 사용자에게 권한 요청 화면을 보여주고 확인
받는 과정을 의미 합니다.

안드로이드의 권한은 아래 링크에서 확인 가능합니다.

https://developer.android.com/reference/android/Manifest.permission

만들려고 하는 앱이 전화번호부와 사용자 위치 관련 정보가 필요할 경우,
관련된 권한을 설정하고,실행 시 사용자 동의를 얻는 방법을 확인해 보도록
하겠습니다.


  1. 권한 설정
    필요한 권한을 AndroidManifest.xml에 등록 합니다.
   File : AndroidManifest.xml
    <uses-permission android:name="android.permission.READ_CONTACTS" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
  1. 사용자에게 권한 요청 문의
   File : MainActivity.java
   @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d(TAG,"Call checkPermission");
        this.onCheckPermission();
        setContentView(R.layout.activity_main);
    }
    
    //권한설정 관련 사용자 요청을 위한 메서드
    //checkSelfPermission은 인자로 주어진 퍼미션이
    //부여 되어 있는지, 아닌지 확인한다.
    //권한을 부여 받았다면 PERMISSION_GRANTED값이
    //리턴 된다.
    
    public void onCheckPermission(){
    if( ActivityCompat.checkSelfPermission(
        this,Manifest.permission.READ_CONTACTS)
        !=PackageManager.PERMISSION_GRANTED
       || ActivityCompat.checkSelfPermission(
     this,Manifest.permission.ACCESS_COARSE_LOCATION)
       !=PackageManager.PERMISSION_GRANTED
     ){
   //권한을 부여 받지 않은 경우, 진입하는 코드
   //ArrayList에 각 필요한 권한들을 add한다.
     permissions.add(Manifest.permission.READ_CONTACTS);
     permissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
     }
     
     //이제 사용자에서 권한 관련 화면을 보여 준다.
     if(permissions.size() > 0) {
     //requestPermissions가 필요한 권한들을 사용자에게 요청
     //두 번째 인자가 String[]이므로 아래 코드에서
     //ArrayList<String>을 String[]변환시킨 다음
     //requestPermissions을 호출 한다.
     String[] permissionsString = permissions.toArray(new String[0]);
   
     ActivityCompat.requestPermissions(
     this, permissionsString,MY_PERMISSIONS_REQUEST_MULTI
     );
  
  }
         
     }
  1. 사용자 권한 선택 완료
    2번 과정을 통해서, 사용자가 화면을 보고 나서 각각의 권한을 선택 한 후
    다음 코드가 수행이 됩니다.
    그리고 아래 함수의 requestCode에는 requestPermissions의 세번째
    인자가 자동으로 mapping됩니다.
@Override
    public void onRequestPermissionsResult(int requestCode, 
    @NonNull @NotNull String[] permissions,
    @NonNull @NotNull int[] grantResults) 
    {
        super.onRequestPermissionsResult(requestCode, 
        permissions, grantResults);
        
        switch (requestCode)
        {
         case MY_PERMISSIONS_REQUEST_MULTI:
        {
                
        for(int i=0; i<grantResults.length; i++)
        {
         if(grantResults[i]==PackageManager.PERMISSION_GRANTED)
         {
        }
          else {
                Toast.makeText(getApplicationContext(),
                 "권한 설정이 필요 합니다.",Toast.LENGTH_SHORT).show();
                finish();
                }
              }
                break;
            }
            default:
                break;
        }
   
   }

멀티플 요청 권한 만큼 반복 수행 후, 한개라도 권한을 획득하지 못하면
앱을 수행하지 않고 종료 합니다.

INTERNET과 같은 노멀 퍼미션은 별도의 사용자 승인 없이 AndroidManifest.xml에 권한설정을 하면 앱을 설치할 때자동으로 승인이 된다.

profile
Next Level

0개의 댓글