Android 6.0 실행 시 권한 처리 에 대해 이야기 합 니 다.
3984 단어 android6.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 이 실 행 될 때의 권한 처리 의 모든 문제 입 니 다.이 글 이 안 드 로 이 드 개발 에 도움 이 되 기 를 바 랍 니 다.