안 드 로 이 드 6.0 실행 시 권한 완벽 한 패 키 징 방법

며칠 전에 곽 대신 의 운행 시 권한 에 대한 전문 강 의 를 보고 영감 을 받 았 다.현재 프로젝트 의 운행 시 권한 을 바탕 으로 완벽 하 게 포장 되 지 않 았 기 때문에 곽 신의 건의 가 눈 에 선 하 다.그래서 그것 을 완전히 두 드 렸 다.그리고 이 를 바탕 으로 자신의 견 해 를 추가 하여 완전한 demo 로 포장 하여 여러분 과 교류 하고 자 합 니 다.

여기 서 저 는 간단하게 activity 에서 권한 과 도구 류 봉 투 를 가 져 왔 습 니 다.

어떤 권한 이 금지 되 거나 모든 권한 이 금지 되 었 습 니 다.여기 서 저 는 올레핀 인터페이스 에 가서 설정 하 는 처 리 를 했 습 니 다.

여러 권한 을 켜 려 면 다른 핸드폰 이 표시 하 는 효과 가 다 를 수 있 습 니 다.어떤 핸드폰 은 권한 Dialog 에 권한 을 가 져 올 개 수 를 표시 하지만,어떤 핸드폰 은 몇 개의 권한 이 필요 한 지 몇 개 를 표시 합 니 다.
마지막 처리:어떤 권한 이 금지 되 어 있 으 면 설정 인터페이스 에서 사용자 에 게 권한 을 열 라 고 알려 줍 니 다.

부분 코드:

/**
 *      : activity             </br>
 *     :http://blog.csdn.net/androidstarjack
 * @author   
 * @version 1.0 </p>     :</br>     :</br>
 */
public class CheckPermissionOnActivity extends AppCompatActivity {
 
 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_checkpermission1);
  ButterKnife.bind(this);
 }
 @OnClick({R.id.btn_runtimne_onClick, R.id.btn_runtimne_onClick_multify,R.id.btn_runtimne_onClick_seting})
 public void onMyListener(View v){
  switch (v.getId()){
   case R.id.btn_runtimne_onClick:
    requestToUserPersiom(1);
    break;
   case R.id.btn_runtimne_onClick_multify:
    requestToUserPersiom(2);
    break;
   case R.id.btn_runtimne_onClick_seting:
    Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
    intent.setData(Uri.parse("package:"+ getPackageName()));
    startActivity(intent);
    break;
  }
 }
 public void requestToUserPersiom(int permisionIndexCount){
  switch (permisionIndexCount){
   case 1:
    ActivityCompat.requestPermissions(CheckPermissionOnActivity.this, new String[]{android.Manifest.permission.CALL_PHONE},100);//     
    break;
   case 2:
   case 3:
   case 4:
    ActivityCompat.requestPermissions(CheckPermissionOnActivity.this, new String[]{android.Manifest.permission.CALL_PHONE,android.Manifest.permission.WRITE_EXTERNAL_STORAGE},100);
    break;
 
  }
 }
 
 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  if(requestCode == 100){
   if(grantResults.length >0 ){
    for (int i = 0; i < grantResults.length; i++) {
     if( grantResults[i] == PackageManager.PERMISSION_DENIED){//   
      return ;
     }
    }
    doosmething();
   }
  }
 }
 
 /**
  *      
  */
 public void doosmething(){
  GetToast.useString(CheckPermissionOnActivity.this,"        ");
 }
}
BaseActivitgy 도구 클래스 로 봉 인 됨:

public class BasePermisitionActivity extends Activity {
 
 private static final int REQUESTPERMISSION_CODE = 100;
 private static QuestPermissionListener questPermissionListener;
 private AlertDialog.Builder builder;
 private AlertDialog alertDialog;
 
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  ActivityManager.addPermissionActivty(this);
 }
 
 public static void requestRuntimePermission(String [] permissions,QuestPermissionListener questPermissionListener){
  Activity actyivty = ActivityManager.permissionActivilyList.get(ActivityManager.permissionActivilyList.size() -1);
  if(actyivty == null){
   return;
  }
  List<String> neetRequestPermisList = new ArrayList<String>();
  for (String permission : permissions) {
   if(ActivityCompat.checkSelfPermission(actyivty,permission) == PackageManager.PERMISSION_DENIED){
    neetRequestPermisList.add(permission);
   }
  }
  BasePermisitionActivity.questPermissionListener = questPermissionListener;
  if(!neetRequestPermisList.isEmpty()){
   ActivityCompat.requestPermissions(actyivty,neetRequestPermisList.toArray(new String[neetRequestPermisList.size()]),REQUESTPERMISSION_CODE);
  }
 }
 
 @Override
 public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
  super.onRequestPermissionsResult(requestCode, permissions, grantResults);
  if(requestCode == REQUESTPERMISSION_CODE){
   for (int i = 0; i < grantResults.length; i++) {
    int granrRequest = grantResults[i];
    if(granrRequest == PackageManager.PERMISSION_DENIED){//      
     if(questPermissionListener != null){
      questPermissionListener.denySomePermission();
     }
      return;
    }
   }
   questPermissionListener.doAllPermissionGrant();
  }
 }
 
 @Override
 protected void onResume() {
  super.onResume();
 
 }
 
 
 public void onResumeCheckPermission(String ...permission){
  if(PermisionControl.lackMissPermission(this,permission)){
   showMissPermissionDialog();
  }
 }
 
 
 @Override
 protected void onDestroy() {
  super.onDestroy();
  ActivityManager.removePermissionActiivty(this);
 }
 /**
  *     ,      
  */
 public void showMissPermissionDialog() {
  if (builder == null) {
   builder = new AlertDialog.Builder(BasePermisitionActivity.this);
   builder.setTitle("  ");
   String msg = "          。<br>\r   \"  \"-\"  \"-      。<br>\r\r          ,    。";
   builder.setMessage(Html.fromHtml(msg));
   //materialDialog.setMovementMethod(LinkMovementMethod.getInstance());
   builder.setPositiveButton("  ", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     alertDialog.dismiss();
    }
   });
   builder.setNegativeButton("  ", new DialogInterface.OnClickListener() {
    @Override
    public void onClick(DialogInterface dialog, int which) {
     alertDialog.dismiss();
     startAppSettings();
    }
   });
   alertDialog = builder.create();
   alertDialog.show();
  } else {
   alertDialog.show();
  }
 }
 //        
 public void startAppSettings() {
  try {
   Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
   intent.setData(Uri.parse("package:"+ getPackageName()));
   startActivity(intent);
  } catch (Exception e) {
   e.printStackTrace();
  }
 }
}
관련 도구 클래스:

/**
 *      :6.0      </br>
 * permission     </br>
 *     :http://blog.csdn.net/androidstarjack
 * @author   
 * Created on 2017/1/3/002
 * @version 1.0 </p>     :</br>     :</br>
 */
public class PermisionControl {
 /**
  *             
  */
 public static boolean lackMissPermission(Context cnt ,String... permission){
  boolean relust = true ;
  for (String per : permission) {
   if(ActivityCompat.checkSelfPermission(cnt,per) == PackageManager.PERMISSION_DENIED){
    relust = false ;
    break;
   }
  }
  return relust;
 }
 
 /**
  *        
  * eg:
  */
 public void requestRuntimePermission(QuestPermissionListener questPermissionListener, String... permissions){
  BasePermisitionActivity.requestRuntimePermission(permissions,questPermissionListener);
 }
}
그리고 다른 포장:

public class PermissionUsage {
 /**********  :   ,     ,  ********/
 public static String[] LOACATION_CAMERA = { Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.CALL_PHONE,
   Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.READ_EXTERNAL_STORAGE};
 /**********  :     ********/
 public static String[] READ_EXTRASORE = { Manifest.permission.READ_EXTERNAL_STORAGE};
 /**********  :     ********/
 public static String[] RCALL_PHONE = { Manifest.permission.READ_EXTERNAL_STORAGE};
}
이상 의 안 드 로 이 드 6.0 이 실 행 될 때 권한 이 완벽 하 게 패 키 징 되 는 방법 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.여러분 께 참고 가 되 고 저 희 를 많이 사랑 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기