Android 수 동 으로 판단 처리 권한 가 져 오기

주로 사용 되 는 몇 가지 방법:

//    
int checkSelfPermission(String)
//    
void requestPermissions(int, String...)
//             
boolean shouldShowRequestPermissionRationale(String)
//        
void onRequestPermissionsResult(int,String[],int[])
상수 표시 권한 이 있 는 지 여부:

PackageManager.PERMISSION_DENIED:   。

PackageManager.PERMISSION_GRANTED:   
상기 네 가지 방법 중 앞의 세 가지 방법 은 슈퍼 port-v4 의 Activity Compat 에 모두 있 으 므 로 호 환 라 이브 러 리 의 방법 을 사용 하 는 것 을 권장 합 니 다.마지막 방법 은 사용자 가 권한 을 부여 하거나 거부 할 때 시스템 이 Activity 나 Fragment 의 방법 을 되 돌려 주 는 것 입 니 다.
1. checkSelfPermission(String)
검사 권한
1.특정한 권한 의 현재 상 태 를 검사 합 니 다.권한 을 요청 할 때 이 권한 이 사용자 에 게 권한 을 수 여 받 았 는 지 확인 해 야 합 니 다.권한 을 수 여 받 은 권한 중복 신청 은 사용 자 를 귀 찮 게 할 수 있 습 니 다.
2.이 방법 은 하나의 매개 변 수 는 권한 이름 이 고 int 의 반환 값 이 있 습 니 다.이 값 으로 위 에서 언급 한 두 상수 와 비교 하여 검사 권한 의 현재 상 태 를 판단 할 수 있 습 니 다.

if (ContextCompat.checkSelfPermission(context, Manifest.permission.READ_CONTACTS)
    != PackageManager.PERMISSION_GRANTED) {
  //     ,           。
}else{
  //     。
}
2. requestPermissions(int, String…)
신청 권한
사용자 에 게 몇 가지 권한 을 부여 해 달라 고 요청 합 니 다.호출 후 시스템 은 사용자 에 게 권한 을 요청 하 는 알림 대화 상 자 를 표시 합 니 다.App 은 이 대화 상 자 를 설정 하고 수정 할 수 없습니다.사용자 에 게 이 권한 과 관련 된 정보 나 설명 이 필요 하 다 면 requestPermissions()를 호출 하기 전에 처리 해 야 합 니 다.
이 방법 은 두 개의 인자 가 있 습 니 다.
int requestCode:onRequest Permissions Result()를 되 돌 릴 때 어떤 권한 수여 신청 의 반전 인지 판단 합 니 다.
String[]permissions:권한 배열,신청 할 권한 의 배열 입 니 다.
이 방법 은 비동기 이기 때문에 반환 값 이 없습니다.사용자 가 권한 수여 작업 을 처리 할 때 Activity 나 Fragment 의 onRequestPermissions Result()방법 을 되 돌려 줍 니 다.

ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.READ_CONTACTS}, MMM);
3. onRequestPermissionsResult(int,String[],int[])
처리 권한 결과 리 셋
1.이 방법 은 Activity/Fragment 에서 다시 써 야 합 니 다.사용자 가 권한 수여 작업 을 처리 하면 시스템 이 자동 으로 이 방법 을 되 돌려 줍 니 다.
2.이 방법 은 세 가지 인자 가 있 습 니 다.
int requestCode:requestPermissions()를 호출 할 때의 첫 번 째 인자 입 니 다.
String[]permissions:권한 배열,requestPermissions()를 호출 할 때 두 번 째 인자 입 니 다.
int[]grantResults:권한 수여 결과 배열 은 permissions 에 대응 하고 구체 적 인 값 은 위 에서 언급 한 Package Manager 의 두 상수 와 비교 합 니 다.

@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
  switch (requestCode) {
    case MMM: {
      if (grantResults.length > 0
        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
        //        ,          。
      } else {
        //         ,      ,      。
      }
      return;
    }
  }
} 
4. shouldShowRequestPermissionRationale(String)
요청 권한 을 표시 할 지 여부
1.첫 번 째 요청 권한 을 거 절 했 을 때 사용 자 는 shouldShowRequestPermission Rationale()을 호출 한 후 true 로 돌아 가 이 권한 이 왜 필요 한 지 설명 해 야 합 니 다.
2.사용자 가 첫 번 째 권한 을 거부 한 후 다음 에 다시 신청 할 때 권한 을 수 여 받 은 dialog 에'알 리 지 않 기'옵션 이 나타 납 니 다.선택 하면 다음 신청 은 사용자 에 게 알 리 지 않 습 니 다.
3.두 번 째 요청 권한 을 거 절 했 을 때 사용 자 는'알림 없 음'옵션 을 선택 하고 shouldShowRequestPermission Rationale()을 호출 한 후 false 로 돌아 갑 니 다.
4.장치 정책 은 현재 응용 프로그램 에서 이 권한 을 가 져 오 는 권한 을 금지 합 니 다.shouldShowRequestPermission Rationale()는 false 로 돌아 갑 니 다.
5.이 알림 의 장점 은 사용자 가 한 번 의 권한 을 거절 한 후에 저희 가 다시 신청 할 때 이 권한 의 중요성 을 일 깨 워 줄 수 있 습 니 다.다시 신청 해 야 할 때 사용 자 는'알 리 지 않 음'을 선택 하고 결단 을 내 려 다음 신청 권한 이 직접 실 패 했 습 니 다.

if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {//     。
 if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.READ_CONTACTS)) {
   //           ,      ,         。
 } else {
  //     。
  ActivityCompat.requestPermissions(thisActivity, new String[]{Manifest.permission.READ_CONTACTS}, MMM);
 }
}
...
@Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) {
 switch (requestCode) {
  case MMM: {
   if (grantResults.length > 0
    && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
    //        。
   } else {
    //         。
   }
   return;
  }
 }
}
이상 은 본 고의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.또한 저 희 를 많이 지지 해 주시 기 바 랍 니 다!

좋은 웹페이지 즐겨찾기