Android 6.0 권한 사용 설명
9267 단어 android
개술
안 드 로 이 드 7.0 이 발표 되면 서 안 드 로 이 드 6.0 의 보급 속도 가 빠르게 올 라 갔 고, 현재 안 드 로 이 드 6.0 의 시장 점유 율 은 15.2% 이다.(구체 적 인 데 이 터 는 안 드 로 이 드 정보 센터 를 볼 수 있 습 니 다. 안 드 로 이 드 개발 자 데 이 대회 가 열 린 후부 터 많은 사이트 가 있 습 니 다. 우리 개발 자 들 이 직접 방문 할 수 있 습 니 다. 사다 리 를 오 르 지 않 아 도 됩 니 다. 국내 개발 자 들 에 게 큰 복음 입 니 다.이 때, 우 리 는 새로운 버 전의 SDK 의 변화 에 적합 해 야 더 나 은 응용 프로그램 이 실 행 될 수 있 습 니 다. 6.0 의 변화 에 대해 서 는 홈 페이지 의 이 글 을 참고 할 수 있 습 니 다: Android 6.0 변경. 이 글 은 주로 Android 6.0 실행 시 권한 (Runtime Permissions) 에 대해 소개 합 니 다.
여기 서 홈 페이지 의 두 편의 글 을 추천 합 니 다. 왜냐하면 공식 문서 가 가장 과학적 이기 때 문 입 니 다.
Android 6.0 (API 레벨 23) 에서처음에 사용 자 는 설치 할 때 권한 을 부여 하 는 것 이 아니 라 실행 할 때 권한 을 부여 하기 시 작 했 습 니 다. 이 방법 은 설치 과정 을 간소화 할 수 있 고 사용 자 는 응용 기능 에 대해 더 많은 통 제 를 할 수 있 습 니 다. 6.0 이하 의 경우 우리 가 응용 프로그램 을 설치 할 때 기본적으로 권한 을 부여 합 니 다. 사용자 도 이러한 권한 이 무슨 소 용이 있 는 지 모 르 고 묵묵히 참 을 수 밖 에 없습니다.새로운 권한 체 제 는 이러한 문 제 를 잘 해결 할 수 있 습 니 다. Google 은 새로운 권한 을 정상 권한 과 위험 권한 으로 나 눕 니 다.
3. 권한 이 적당 하 다.
우선 저 희 는 이전 방식 에 따라 전 화 를 걸 수 있 는 권한 (전화 걸 기 권한) 을 신청 하고 Android 6.0 (targetSdkVersion > = 23) 핸드폰 에서 테스트 합 니 다.
//
// Button , Intent
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + phoneNumber));
startActivity(intent); // 。(android studio 2.2.2 ) AS 。
App 을 실행 하고 전화 걸 기 버튼 을 누 르 면 App 이 무 너 진 것 을 발견 할 수 있 습 니 다... 아래 에 이상 원인 도 를 붙 입 니 다.
그림 에서 보 듯 이 Security Exception 권한 이 이상 하기 때 문 입 니 다. 이 이상 을 해결 하 는 방법 은 두 가지 가 있 습 니 다.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
/**
*
* , Context;
* ;
* requestCode, 。
* requestPermissions , , 。
*/
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else {
// ,
mLoginPresenter.call(this);
}
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
switch (requestCode) {
case 1:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
mLoginPresenter.call(this);
} else {
Toast.makeText(this, " ", Toast.LENGTH_LONG).show();
}
break;
}
}
신청 권한 의 기본 절 차 는 위 와 같 습 니 다. 진실 을 추구 하지 않 았 습 니 다. 다음은 진실 을 살 펴 보 겠 습 니 다. 위의 그림...
사용자 가 인증 을 거부 하면 다음 탄 상자 에 서 는 '알림 하지 않 기' 가 있 습 니 다.이 옵션 을 사용 하면 앱 이 나중에 인증 을 계속 요청 하 는 것 을 방지 할 수 있 습 니 다. 만약 이 옵션 이 인증 을 거부 하기 전에 사용자 에 게 선택 되 었 다 면 다음 에 다시 전 화 를 걸 때 Dialog 는 알림 을 하지 않 습 니 다. 앱 은 아무것도 하지 않 습 니 다. 이것 은 사용자 에 게 매우 나 쁜 경험 입 니 다. 나중에 처리 방법 을 알려 드 리 겠 습 니 다.
주의: 휴대 전화 마다 알림 방식 이 다 를 수 있 습 니 다. 아래 쌀 휴대 전화 에 있 는 힌트 를 보 세 요.
4. 더욱 우아 한 처리 권한 알림 문제
사용자 가 인증 을 거부 하면 다음 탄 상자 에 서 는 '알림 하지 않 기' 가 있 습 니 다.앱 이 나중에 인증 을 계속 요청 하 는 것 을 방지 하기 위 한 옵션 입 니 다. 이 옵션 이 인증 을 거부 하기 전에 선택 되 었 습 니 다. 다음 에 이 권한 을 위해 requestPermissions 를 요청 할 때 대화 상자 가 나타 나 지 않 습 니 다. 결 과 는 앱 이 아무것도 하지 않 습 니 다. 이것 은 매우 나 쁜 사용자 체험 이 될 것 입 니 다. 사용자 가 작업 을 했 지만 응답 을 받 지 못 할 것 입 니 다. 이 경우 잘 처리 해 야 합 니 다. request 요청 중 입 니 다.Permissions 전에 요청 권한 을 보 여 주 는 힌트 가 activity 의 shouldShowRequestPermission Rationale 방법 을 통 해 필요 한 지 확인 해 야 합 니 다. 이 방법 이 true 로 돌아 가면 사용자 가 권한 을 거부 한 적 이 있 음 을 표시 합 니 다. 이 때 메시지 알림 상 자 를 쳐 서 권한 을 요청 한 이 유 를 밝 히 고 권한 을 부여 해 야 합 니 다. 코드 는 다음 과 같 습 니 다.
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CALL_PHONE)) {
showSecurityMessage(" , , 。", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
ActivityCompat.requestPermissions(LoginActivity.this,
new String[]{Manifest.permission.CALL_PHONE},
1);
}
});
return;
}
/**
*
* , Context;
* ;
* requestCode, 。
* requestPermissions , , 。
*/
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CALL_PHONE}, 1);
} else {
// ,
mLoginPresenter.call(this);
}
private void showSecurityMessage(String message, DialogInterface.OnClickListener okListener) {
new AlertDialog.Builder(this)
.setMessage(message)
.setPositiveButton(" ", okListener)
.setNegativeButton(" ", null)
.create()
.show();
}
주: 한 번 에 여러 권한 을 요청 할 때 권한 이 없 는 설명 을 추가 하 는 것 을 잊 지 마 세 요.
효과 그림:
5. 호 환 라 이브 러 리 를 사용 하여 이전 버 전 을 호 환 합 니 다.
이 코드 는 안 드 로 이 드 6.0 이상 에서 실행 되 는 데 문제 가 없 지만 API 23 이전 에는 안 됩 니 다. 그런 방법 이 없 기 때 문 입 니 다. 거 친 방법 은 버 전 을 검사 하 는 것 입 니 다.
if (Build.VERSION.SDK_INT >= 23) {
// Marshmallow+
} else {
// Pre-Marshmallow
}
그러나 너무 복잡 합 니 다. 여기 서 우 리 는 v4 호 환 라 이브 러 리 를 사용 할 수 있 습 니 다. 이것 에 대해 호 환 을 한 적 이 있 습 니 다. 다음 과 같은 함수 로 대체 할 수 있 습 니 다.
6. 3 자 오픈 소스 라 이브 러 리 사용
위 코드 는 실제 개발 에 있어 서 매우 번 거 롭 습 니 다. 신청 한 권한 만 위험한 권한 이 므 로 검 사 를 받 아야 합 니 다. 물론 직접 포장 해서 사용 하기에 편리 합 니 다. 다음은 github 에서 star 수가 가장 많은 Permissions 라 이브 러 리 입 니 다. 개발 중 에 직접 사용 할 수 있 습 니 다.
참고 글:https://inthecheesefactory.com/blog/things-you-need-to-know-about-android-m-permission-developer-edition/en
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Kotlin의 기초 - 2부지난 글에서는 Kotlin이 무엇인지, Kotlin의 특징, Kotlin에서 변수 및 데이터 유형을 선언하는 방법과 같은 Kotlin의 기본 개념에 대해 배웠습니다. 유형 변환은 데이터 변수의 한 유형을 다른 데이터...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.