[안드로이드] 권한요청 및 권한체크하기 (마시멜로우6.0이상 필수)
안녕하세요. 오늘은 안드로이드 권한요청과 권한체크를 만들어주는 부분을 포스팅 할거에요!
마시멜로우6.0 이전버전엔 사용자가 알지도 못하는 상황에 권한을 다 부여해서 개인정보 유출에 관한 이슈들이 상당히 많았어요.
그래서 그 이후로는 개발할 때 개발자들도 꼭!! 인지하고 있어야하는 권한체크!에 대해 알려드릴게요.
1. 권한 설정하기
먼저, 권한을 설정해주기 위해서는 AndroidManifest.xml에 권한등록을 해주어야 해요.
권한은 모두 사용자의 동의가 필요한 것이아니라 위험한 권한들만 동의가 필요해요.
[AndroidManifest.xml]
<uses-permission android:name="android.permission.CAMERA"/>
2. 권한 확인
개발하는 앱이 위험 권한이 필요한 경우에는 해당 앱을 들어갈때마다 앱에서 체크를 해주어야해요.
사용자가 권한을 다시 거부했을 수도 있기 때문이죠.
권한 보유 여부를 확인하는 방법은 ContextCompat.checkSelfPermission()메서드를 사용하는 것이에요.
int permssionCheck = ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA);
앱에 권한이 있는 경우 이 메서드는 PackageManager.PERMISSION_GRANTED를 반환하고,
권한이 없는 경우 PERMISSION_DENIED를 반환해요.
3. 권한 요청
사용자에게 권한을 요청할 때는 그 권한이 필요한 이유를 사용자에게 설명해주어야해요.
그러기 위해서는 shouldShowRequestPermissionRationale()메서드를 사용하면 되요.
이 메서드는 사용자가 거부를 했을 때 true를 반환해요.
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); } }
앱에 아직 권한이 없는경우 requestPermissions()메서드를 호출하여 권한 요청을 한 후, 사용자가 대화상자에 응답한 후 결과를 가지고 콜백 메서드를 호출해요.
4. 권한 요청 응답처리
사용자가 응답하면 시스템은 onRequestPermissionResult()메서드를 호출하여 사용자 응답을 전달해요.
@Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_CAMERA: { // If request is cancelled, the result arrays are empty. 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; } } }
5. 전체 예제소스
[MainaActivity.java]
public class MainActivity extends AppCompatActivity { private final int MY_PERMISSIONS_REQUEST_CAMERA=1001; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); int permssionCheck = ContextCompat.checkSelfPermission(this,Manifest.permission.CAMERA); if (permssionCheck!= PackageManager.PERMISSION_GRANTED) { Toast.makeText(this,"권한 승인이 필요합니다",Toast.LENGTH_LONG).show(); if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) { Toast.makeText(this,"000부분 사용을 위해 카메라 권한이 필요합니다.",Toast.LENGTH_LONG).show(); } else { ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, MY_PERMISSIONS_REQUEST_CAMERA); Toast.makeText(this,"000부분 사용을 위해 카메라 권한이 필요합니다.",Toast.LENGTH_LONG).show(); } } } @Override public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { switch (requestCode) { case MY_PERMISSIONS_REQUEST_CAMERA: { // If request is cancelled, the result arrays are empty. 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; } } } }
꼭! 개발하시기 전에 내가 위험권한을 이용하고 있는지 확인 후 퍼미션 체크를 해주세요!
도움이 되셨다면 공감버튼 한번 씩 부탁드릴게요!
'IT 개발 > 안드로이드개발' 카테고리의 다른 글
[안드로이드] 액티비티(화면)전환, Intent이용 (0) | 2018.10.19 |
---|---|
[안드로이드] 현재 GPS정보 알아오기/ 내 현재위치 찾기 (2) | 2018.10.13 |
[안드로이드] JSON 파싱 - JsonArray 가져오기 (3) | 2018.10.12 |
[안드로이드]Json 파싱 - URL에서 JSON 읽기 (0) | 2018.10.12 |
[안드로이드] EditText에서 텍스트입력 한줄로 제한하기(singleLine) (4) | 2018.10.05 |
[안드로이드] 화면고정, 세로모드/가로모드 설정 (0) | 2018.10.05 |
[안드로이드]커스텀 다이얼로그 - ClickListener와 Callback 사용하는 법 (0) | 2018.10.04 |
[안드로이드] px,dp,sp 크기단위 사용법 및 정리 (0) | 2018.10.02 |