Android 6.0 위 챗 권한 설정 모방
http://sunjiajia.com/2016/04/19/android-m-permissions/
이 를 바탕 으로 수정 을 하면 원 하 는 효과 가 실 현 됩 니 다.사용자 에 게 권한 열기 안내)
다음은 저장 공간,전화,카메라 권한 을 예 로 들 면
사진 잘 못 만 들 었 어 요.이해 해 주세요.
권한 추가
권한 처리 도구 클래스
package com.fly.permissiondemo;
/*
*
* *
* * * ===================================
* * * Copyright (c) 2016.
* * * :
* * * :@
* * * :http://sunjiajia.com
* * * Github:https://github.com/opengit
* * *
* * * **: , 。
* * * ===================================
* *
* *
*
*/
import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.support.v4.app.ActivityCompat;
import java.util.ArrayList;
import java.util.List;
/**
* :
* API23, Android M use permissions , 。
* <p/>
* *** :
* *****1. Activity, ;
* *****2. , 2 :
* ********1). Allow , , ;
* ********2). Deny , Activity Permisssions 。
* *****3. Deny , Activity, , , “dont ask me again”:
* ********1). “dont ask me again” checkbox, Dialog Snackbar ;
* ********2). , Allow, , ;
* ********3). , Deny, Activity Permisssions 。
*/
public class PermissionsUtil {
// 、
public static final int REQUEST_STATUS_CODE = 0x001;
public static final int REQUEST_PERMISSION_SETTING = 0x002;
// , , Androidmanifest.xml 。
public static String[] PERMISSIONS_GROUP_SORT = {
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.CALL_PHONE,
Manifest.permission.CAMERA
};
private static PermissionCallbacks callbacks;
public interface PermissionCallbacks {
void onPermissionsGranted();//
void onPermissionsDenied(int requestCode, List<String> perms);
}
public static void checkAndRequestPermissions(final Activity activity, PermissionCallbacks callback) {
if (Build.VERSION.SDK_INT >= 23) {
callbacks = callback;
// list,
ArrayList<String> denidArray = new ArrayList<>();
// PERMISSIONS_GROUP, denidArray
for (String permission : PERMISSIONS_GROUP_SORT) {
int grantCode = ActivityCompat.checkSelfPermission(activity, permission);
if (grantCode == PackageManager.PERMISSION_DENIED) {
denidArray.add(permission);
}
}
// 0,
if (denidArray.size() > 0) {
// ,
ArrayList<String> denidArrayNew = new ArrayList<>();
denidArrayNew.add(denidArray.get(0));
// denidArray , requestPermissions
String[] denidPermissions = denidArrayNew.toArray(new String[denidArrayNew.size()]);
requestPermissions(activity, denidPermissions);
} else {
//
callbacks.onPermissionsGranted();
}
}
}
/**
* shouldShowRequestPermissionRationale :
* ***1). , false;
* ***2). , Deny , shouldShowRequestPermissionRationale(), true;
* ***3). , Deny , “dont ask me again” , shouldShowRequestPermissionRationale() , false;
* ***4). , , shouldShowRequestPermissionRationale(), false。
*/
public static boolean showRationaleUI(Activity activity, String permission) {
return ActivityCompat.shouldShowRequestPermissionRationale(activity, permission);
}
/**
* , “dont ask me again”, Permission
*/
public static void requestPermissions(Activity activity, String[] permissions) {
ActivityCompat.requestPermissions(activity, permissions, REQUEST_STATUS_CODE);
}
/**
* ,App :
* *** shouldShowRequestPermissionRationale , App , Dialog SnackBar
*/
public static boolean isAppFirstRun(Activity activity) {
SharedPreferences sp = activity.getSharedPreferences("config", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sp.edit();
if (sp.getBoolean("first_run", true)) {
editor.putBoolean("first_run", false);
editor.commit();
return true;
} else {
editor.putBoolean("first_run", false);
editor.commit();
return false;
}
}
}
사용 방법:시작 페이지 AppStart 에서 첫 페이지 를 돌 릴 때 호출
PermissionsUtil.checkAndRequestPermissions(AppStart.this, new PermissionsUtil.PermissionCallbacks() {
@Override
public void onPermissionsGranted() {
//
toMainActivity();
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
}
});
이것 은 AppStart 에서 의 리 셋 입 니 다.현재 의 처리 방법 은 매번 제 시 된 권한 신청 의 리 셋 결과 에 따라 대응 하 는 권한 을 처리 하고 처리 가 끝 날 때마다 한 번 씩 반복 하 는 것 입 니 다.“PERMISSIONS_GROUP_SORT'는 모든 권한 이 가 져 올 때 까지'onPermissions Granted()'에서 이동 할 수 있 도록 모든 권한 을 순환 처리 합 니 다.이렇게 처리 하면 다음 시작 시 얻 지 못 한 권한 을 직접 물 어 볼 수 있 습 니 다.
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == PermissionsUtil.REQUEST_STATUS_CODE) {
if (permissions[0].equals(Manifest.permission.READ_EXTERNAL_STORAGE)) {//
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//
PermissionsUtil.checkAndRequestPermissions(this, new PermissionsUtil.PermissionCallbacks() {
@Override
public void onPermissionsGranted() {
toMainActivity();
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
}
});//
} else {// -
createLoadedAlertDialog(" - -"+ getString(R.string.app_name) +"- , App ");
}
}
if (permissions[0].equals(Manifest.permission.CALL_PHONE)) {//
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//
PermissionsUtil.checkAndRequestPermissions(this, new PermissionsUtil.PermissionCallbacks() {
@Override
public void onPermissionsGranted() {
toMainActivity();
}
@Override
public void onPermissionsDenied(int requestCode, List<String> perms) {
}
});
} else {// -
createLoadedAlertDialog(" - -" + getString(R.string.app_name) + "- , App ");
}
}
if (permissions[0].equals(Manifest.permission.CAMERA)) {//
if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {//
//
toMainActivity();
} else {// -
createLoadedAlertDialog(" - -"+ getString(R.string.app_name) +"- , App ");
}
}
}
}
설 정 된 권한 그룹 에 몇 가지 권한 이 있 으 면 이 반전 에서 몇 가지 판단 을 써 서 해당 하 는 우호 적 인 알림 정 보 를 처리 해 야 합 니 다.단일 처리 만 해 야 합 니 다.이런 방식 은 사용자 와 계속 송 아 지 를 잡 아 당 기 는 것 을 피 할 수 있 습 니 다.간단 하고 거 친 알림 으로 사용자 에 게 권한 을 가 져 다 주 고 사용자 가 따 르 지 않 으 면 직접 설정 을 뛰 어 넘 으 면 책임 을 지고 응용 프로그램 을 종료 합 니 다.다음은 git 주소https://git.oschina.net/feiyangwei/PermissionDemo.git
이 방안 은 아직 보완 이 필요 합 니 다.만약 에 사용자 가 응용 프로그램 을 열 었 을 때 안에 수정 권한 을 설정 하면 저 는 이 권한 의 수정 을 어떻게 감청 하 는 지 잘 모 르 겠 습 니 다.위 챗 은 응용 프로그램 을 직접 다시 열 면 권한 을 다시 얻 을 수 있 습 니 다.아 는 신 이 있 으 면 토론 할 수 있 습 니 다. 。
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Bitrise에서 배포 어플리케이션 설정 테스트하기이 글은 Bitrise 광고 달력의 23일째 글입니다. 자체 또는 당사 등에서 Bitrise 구축 서비스를 사용합니다. 그나저나 며칠 전 Bitrise User Group Meetup #3에서 아래 슬라이드를 발표했...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.