Android 6.0 실행 시 권한 처리 에 대해 이야기 합 니 다.

런 타임 권한 소개
Android 6.0 은 기 존의AndroidManifest.xml성명 권한 을 바탕 으로
실행 시 권한 동적 검 측 이 추가 되 었 습 니 다.다음 권한 은 실행 시 판단 해 야 합 니 다.
     1.신체 센서
     2.달력
     3.카메라
     4.주소록
     5.지리 적 위치
     6 마이크
     전화
     8.문자
     9.저장 공간
Android 6.0 에서 app 이 일부 권한 을 얻 으 려 면 응용 프로그램 에서 이 권한 을 부여 하 는 지 확인 하 는 대화 상 자 를 팝 업 합 니 다.
구체 적 인 캡 처 는 다음 과 같다.

이것 이 해 야 할 장점 은 app 을 실행 할 때 그 중의 일부 권한 을 거절 하고 app 이 당신 의 프라이버시 에 닿 지 않도록 하 는 것 입 니 다(예 를 들 어 주소록,문자 등).Android 6.0 이전에 app 설치 에 동의 하면 이 app 은 권한 목록 의 모든 권한 을 가 져 올 수 있 음 을 의미 합 니 다.(주:여기 서 말 하 는 것 은 모두 네 이 티 브 안 드 로 이 드 시스템 입 니 다.예 를 들 어 MIUI 와 같은 제3자 ROM 은 일찍부터 이런 기능 을 갖 추 었 습 니 다.)
다음은 관련 API 를 살 펴 보 겠 습 니 다.먼저Context.checkSelfPermission(String permission) 방법 을 살 펴 보 겠 습 니 다.이 방법 은 주로 이 앱 이 특정한 권한 을 부 여 받 았 는 지,들 어 오 는 매개 변수 가 있 는 지 확인 하 는 데 사 용 됩 니 다.부 여 된 경우PERMISSION_GRANTED 로 돌아 가 고 그렇지 않 으 면 돌아 갑 니 다PERMISSION_DENIED .
만약 에 PERMISSION_DENIED 로 돌아간다 면 우 리 는 이 권한 을 신청 해 야 한다.이 럴 때Activity.requestPermissions(String[] permissions, int requestCode) 이 방법 을 써 야 한다.말 그대로 이 방법의 역할 은 어떤 권한 을 신청 하 는 것 이다.첫 번 째 매개 변 수 는 신청 할 권한 입 니 다.매개 변수 형식 은 하나의 배열 입 니 다.즉,한 번 에 여러 권한 을 신청 할 수 있 습 니 다.두 번 째 매개 변 수 는 신청 권한 의 코드 로 다음 리 셋 에서 선택 하 는 데 사 용 됩 니 다.
사용자 가 권한 신청 대화 상자 에서 선택 하면onRequestPermissionsResult (int requestCode, String[] permissions, int[] grantResults) 방법 을 되 돌려 줍 니 다.
     첫 번 째 매개 변 수 는 위의 권한 코드 입 니 다.
     두 번 째 매개 변 수 는 신청 한 권한 배열 입 니 다.
     세 번 째 매개 변 수 는 권한 신청 의 결과 입 니 다.
위의 몇 가지 방법 을 결합 하면 다음 과 같은 권한 신청 코드 모델 을 쓸 수 있 습 니 다.

public static final int READ_CONTACTS_REQUEST_CODE = 101;

//          
if (ContextCompat.checkSelfPermission(this, android.Manifest.permission.READ_CONTACTS) !=
 PackageManager.PERMISSION_GRANTED) {
 //     
 ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, READ_CONTACTS_REQUEST_CODE);
} else {
 // TODO        

}

@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
 super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 switch (requestCode) {
 case READ_CONTACTS_REQUEST_CODE:
  if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
  // TODO          

  } else {
  // TODO         

  }
  break;
 }

}
여기 서 주의해 야 할 방법 이 하나 더 있 습 니 다.바로shouldShowRequestPermissionRationale (Activity activity, String permission)방법 입 니 다.이 방법의 역할 은 사용자 가 어떤 권한 을 거절 한 후에 다음 에 이 권한 이 필요 하 다 는 설명 을 보 여 주 는 것 이다.
실행 시 신청 권한 은 기본적으로 이 렇 습 니 다.모든 권한 이 실행 되 어야 할 때 신청 하 는 것 이 아니 라'위험'권한 만 실행 시 신청 할 수 있 습 니 다.예 를 들 어 연락 처 를 읽 고 위치 정 보 를 얻 으 며 SD 카드 를 읽 고 쓰 는 등 은 모두'위험 권한'이 고 진동,인터넷,블 루 투 스 등 은 일반 권한 이 므 로 실행 할 때 신청 할 필요 가 없다.
실행 시 권한 신청 을 마 친 후,또 주의해 야 할 것 은 안 드 로 이 드 6.0 에 부상 창 을 표시 하 는 데 도'구덩이'가 있다 는 것 이다.일반적인 부상 창 을 표시 하 는 방법 을 호출 하면'permission denied for this window type'이상 을 던 집 니 다.해결 방안 은 부상 창 을 표시 하기 전에 호출Settings.canDrawOverlays(context) 방법 이 필요 하 다 는 것 이다.이 방법 이 true 로 돌아 가면 사용자 가 부상 창 을 만 드 는 것 에 동의 한 다 는 것 을 설명 합 니 다.그렇지 않 으 면 관련 설정 페이지 로 이동 할 수 있 습 니 다.구체 적 인 코드 모델 은 다음 과 같다.

if (Build.VERSION.SDK_INT >= 23) {
 if (Settings.canDrawOverlays(context)) {
 //      
 } else {
 //           
 Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);
 startActivity(intent);
 }
} else {
 //     Android 6.0,       
}
총결산
자,여기까지 하 겠 습 니 다.이상 은 안 드 로 이 드 6.0 이 실 행 될 때의 권한 처리 의 모든 문제 입 니 다.이 글 이 안 드 로 이 드 개발 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기