1. 程式人生 > >android許可權請求框架

android許可權請求框架

封裝的許可權請求框架,自己練手使用這一個中有兩套框架使用方法不同,可按需使用。

此文主要說明如何引用及使用方法

How to

To get a Git project into your build:

Step 1. Add the JitPack repository to your build file

gradle maven sbt leiningen Add it in your root build.gradle at the end of repositories:

allprojects {
  repositories {
    ...
    maven { url 'https://jitpack.io' }
  }
}

Step 2. Add the dependency

dependencies {
        implementation 'com.github.gaof5:GfPermission:v1.0'
}

方法一:運用註解、實現PermissionCallback方式配合使用,用於某activity進行請求,步驟2、3可寫在基類中方便使用

1.在需要請求許可權的操作中新增此方法

  //註解用於申請許可權後再重複執行此方法,CAMERA_CODE為請求標識碼
  @IPermission(CAMERA_CODE)
  private void cameraTask() {
      //先判斷是否已申請此許可權
      if(PermissionManager.hasPermission(this, Manifest.permission.CAMERA)){
          //如果已申請許可權則執行操作
          Toast.makeText(this,"相機許可權拿到拍照",Toast.LENGTH_SHORT).show();
      }else {//沒有許可權申請
          PermissionManager.requestPermissions(this,"需要相機許可權拍照",CAMERA_CODE,Manifest.permission.CAMERA);
      }
  }

2.在activity中重新onRequestPermissionsResult方法,呼叫 PermissionManager.onRequestPermissionResult 方法

@Override
  public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
      super.onRequestPermissionsResult(requestCode, permissions, grantResults);
      PermissionManager.onRequestPermissionResult(requestCode,permissions,grantResults,this);
  }

3.進行完1、2步驟完後直接通過許可權申請會直接執行cameraTask()方法即執行此段程式碼:

Toast.makeText(this,"相機許可權拿到拍照",Toast.LENGTH_SHORT).show();

如使用者拒絕許可權,並且勾選了不再詢問,則需要Activity實現PermissionCallback

@Override
  public void onPermissionGranted(int requestCode, List<String> perms) {
      //已同意權限
  }

  @Override
  public void onPermissionDenied(int requestCode, List<String> perms) {
      //檢查使用者是否拒絕過許可權,並且點選了 不再詢問
      if(PermissionManager.somePermissionPermanentlyDenied(this,perms)){
          //顯示一個對話方塊告訴開啟 此操作可自行處理
          new AppSettingDialog.Builder(this).setTitle("許可權申請")
                  .setRationale("需要請求")
                  .setNegativeButton("取消")
                  .setPositiveButton("設定")
                  .setCancelListener(new DialogInterface.OnClickListener() {
                      @Override
                      public void onClick(DialogInterface dialog, int which) {
                          dialog.dismiss();
                      }
                  }).build().show();
      }
  }

方法二:方法二接入流程有些肯覺得複雜,雖然寫入基類後使用還好。因此重做了一套框架使用直接呼叫,最終操作在回撥中進行

此方法無需先判斷是否已申請了許可權,許可權請求成功都會回撥setPermissionCallback onPermissionGranted方法

    String[] perms=new String[]{Permission.ACCESS_FINE_LOCATION,Permission.READ_CONTACTS};
    GfPermission.with(this)
            .setPermissions("需要定位、聯絡人許可權傳送位置",LOCATION_CONTACTS_CODE,perms)
              //如已設定.rationale()拒絕許可權並勾選了不再詢問,則會執行rationale中回撥,不設定.rationale()會預設彈框引導設定
//                .rationale(new RationaleCallback() {
//                    @Override
//                    public void onPermissionDenied(int requestCode, List<String> perms) {
//                        Toast.makeText(MainActivity.this,"不再詢問處理",Toast.LENGTH_SHORT).show();
//                    }
//                })
            .setPermissionCallback(new PermissionCallback() {
                @Override
                public void onPermissionGranted(int requestCode, List<String> perms) {
                    //拿到許可權進行自己的操作
                    Toast.makeText(MainActivity.this,"定位、聯絡人許可權拿到傳送位置",Toast.LENGTH_SHORT).show();
                }

                @Override
                public void onPermissionDenied(int requestCode, List<String> perms) {
                    //使用者拒絕許可權後的回撥 
                    //1.如使用者勾選了不再詢問,如未設定.rationale()則會預設彈框引導設定,不用在此回撥操作
                    //如已設定.rationale()則會執行rationale中回撥 
                    //2.使用者未勾選了不再詢問,框架只會回撥此方法,不會進行其他操作
                    Toast.makeText(MainActivity.this,"拒絕許可權",Toast.LENGTH_SHORT).show();
                }
            }).request();//request()發起請求在最後呼叫

Ps:練手框架不喜勿噴