yanzhenjie:permission:1.0.5 使用

权限流程图:
第一次弹出 选择拒绝-》弹出提醒对话框改权限功能-》 确定拒绝是 关闭当前页面
                                -》 确定拒绝否 --》继续申请该权限
第二次弹出 选择绝对不允许-》 弹出设置告诉用户需要在设置中打开权限-》 点击确定跳入设置中
第三次: 弹出跳入设置对话框,用户手动在设置中打开

 

compile 'com.yanzhenjie:permission:1.0.5'

========================================================================

package com.denganzhi.permission;


import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.PermissionNo;
import com.yanzhenjie.permission.PermissionYes;

public class PermissionActivity extends AppCompatActivity {
    ImageView permission_bitmap;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_permission);
        permission_bitmap = (ImageView)findViewById(R.id.permission_bitmap);
    // 开始
        sendPermeission();
    }

 // 权限测试使用
    private  String iMei="";
    public  void readImg(View view){
        if (ActivityCompat.checkSelfPermission(PermissionActivity.this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
            //没有权限
            Toast.makeText(PermissionActivity.this,"imei:没有权限",Toast.LENGTH_SHORT).show();
        }else {
            //有权限
            iMei = ((TelephonyManager) getSystemService(TELEPHONY_SERVICE)).getDeviceId();
            Toast.makeText(PermissionActivity.this,"imei:"+iMei,Toast.LENGTH_SHORT).show();

        }

    }
  // 1.第一次弹出
    private  void sendPermeission(){
        AndPermission.with(this).requestCode(100).permission(Manifest.permission.WRITE_EXTERNAL_STORAGE) .send();
    }

 // 2.第一次弹出选择允许,继续申请其他权限
    // 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。
    @PermissionYes(100)
    private void getLocationYes(List grantedPermissions) {
        // TODO 申请权限成功。
        AndPermission.with(this).requestCode(101).permission(Manifest.permission.READ_PHONE_STATE) .send();
    }
// 申请第二个权限
    @PermissionYes(101)
    private void gePhoneStatYes(List grantedPermissions) {
        // TODO 申请权限成功。
        Toast.makeText(PermissionActivity.this,"读取手机卡状态!!!",Toast.LENGTH_SHORT).show();
       // AndPermission.with(this).requestCode(102).permission(Manifest.permission.WRITE_EXTERNAL_STORAGE).send();

    }   // 成功回调的方法,用注解即可,里面的数字是请求时的requestCode。

  // 第一个权限申请选择拒绝,或者第二次弹出选择永久拒绝处理
    // 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。
    @PermissionNo(100)
    private void getLocationNo(List deniedPermissions) {
        // 用户否勾选了不再提示并且拒绝了权限,那么提示用户到设置中授权。
        Log.e("getLocationNo: ","1111" );
        // 第二次 用户否勾选复选框了不再提示并且永久拒绝了权限,那么弹出对话框提示用户到设置中授权,用户点击确定跳入设置中
        if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
            // 第一种:用默认的提示语。如果用户选择了绝对不允许,那么对话框不会弹出来了,只能拿到设置中打开
            AndPermission.defaultSettingDialog(this, 100).show();
        }else {
            //   finish();
            // 3.第一次 弹出权限,用户选择拒绝, 弹出权限解释对话框
            sendAgain(100,Manifest.permission.WRITE_EXTERNAL_STORAGE);
        }
    }    // 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。

  // 第二次选择拒绝 

@PermissionNo(101)
    private void getPhoneStateNo(List deniedPermissions) {
        // 用户否勾选了不再提示并且拒绝了权限,那么弹出只能到设置中打开权限对话框,用户点击,跳入设置中
        if (AndPermission.hasAlwaysDeniedPermission(this, deniedPermissions)) {
            // 第一种:用默认的提示语。
            AndPermission.defaultSettingDialog(this, 101).show();
        }else {
            //   finish();
            sendAgain(101,Manifest.permission.READ_PHONE_STATE);
        }
    }    // 失败回调的方法,用注解即可,里面的数字是请求时的requestCode。

    @Override
    public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
        // 只需要调用这一句,第一个参数是当前Acitivity/Fragment,回调方法写在当前Activity/Framgent。
        AndPermission.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
    }
// 4. 权限解释对话框,如果用户选择 确定,那么继续申请当前权限
// 用户选择否,不申请,失败对话框
    private void sendAgain(final int code,final String permission){
        AlertDialog.build(PermissionActivity.this)
                .setCancelable(false)
                .setTitle("友好提醒")
                .setMessage("您拒绝该该权限可能会导致应用无法正常使用,您确定要拒绝么?")
                .setPositiveButton("否",new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        AndPermission.with(PermissionActivity.this).requestCode(code).permission(permission) .send();
                    }
                })
                .setNegativeButton("是", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        PermissionActivity.this.finish();
                    }
                }).show();
    }
}
========================================================================

 

你可能感兴趣的:(Android开发)