Android 动态获取权限

从 Android 6.0(API 级别 23)开始,用户开始在应用运行时向其授予权限,而不是在应用安装时授予。此方法可以简化应用安装过程,因为用户在安装或更新应用时不需要授予权限。它还让用户可以对应用的功能进行更多控制;例如,用户可以选择为相机应用提供相机访问权限,而不提供设备位置的访问权限。用户可以随时进入应用的“Settings”屏幕调用权限。

首先我写了一个获取权限的接口然后可以继承接口可以对具体需要获取的权限进行重写 

其实写这个主要是为了省点写代码的时间 有看过一个有趣的理论 面向对象编程的继承、封装、多态,其实都是为了一个目的:减少重复的代码量。写代码最忌讳的就是ctrl c ctrl v,当然我本人也无法彻底改变复制粘贴的习惯=-= 。下面进入主题

我先写了一个请求权限的接口:

public interface RequestPermission1 {
    void requestPermission(Activity activity);
}

 

以请求写文件权限为例:

继承该借口并实现

/**
 * Description:
 * Data:2018/10/14-15:03
 * Author: satsuki
 */
public class WriteExternalStorage implements RequestPermission1 {
    @Override
    public void requestPermission(Activity activity) {
        //检查这个权限是否已经获取
        int checkWriteExternalStoragePermission = ActivityCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE);
        if(checkWriteExternalStoragePermission!= PackageManager.PERMISSION_GRANTED){
            //如果没有权限则获取权限 requestCode在后面回调中会用到
            ActivityCompat.requestPermissions(activity,new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE},3);
            Log.e("没有权限,","请求权限");
        }
    }
}

然后使用这个类就可以动态获取权限

其他权限可以参考https://developer.android.com/guide/topics/security/permissions?hl=zh-cn

进行相应的改写即可

最后可以复写它的回调函数 对是否获取到权限进行判断:

//此处的requestCode就是上面申请时自己定义的

@Override
public void onRequestPermissionsResult(int requestCode,String permissions[], int[] grantResults) {
    switch (requestCode) {
        case 3:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

            } else {
                Toast.makeText(this, "权限被拒绝了", Toast.LENGTH_LONG).show();
            }
            break;
        default:
            break;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值