android6.0新权限获取(以相机举例)


1,依然要在清单文件中添加权限(不但需要在代码中动态请求权限,在清单文件中依旧需要设置):

<uses-permission android:name="android.permission.CAMERA"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>

2,代码实现动态申请:

首先是个简单的布局文件

<TextView
    android:id="@+id/camera_permission"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="权限获取:"
    android:textSize="16sp"
    android:textColor="#ff4081"/>

<Button
    android:id="@+id/number_permission"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:text="权限获取:"
    android:textSize="16sp"
    android:textColor="#ff4081"/>


3,逻辑代码:

  3.1首先介绍下几个方法:

 


a,检查是否已经得到需要的权限:

ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA);

b,根据用户的选择返回true或者false

ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)

第一次安装app的时候,这个方法返回的是false,如果用户点击了”否“,那么这个将一直返回true,知道用户点击确定为止。

所以,当app第一次请求权限被拒绝的时候,程序员可以通过

if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {。。。}
来进行第二次申请,这个时候如果客户点击确定,使app获取权限,那么这个方法将会返回false。


c,当首次申请权限被拒绝的时候,程序员用代码进行再次申请申请权限。

ActivityCompat.requestPermissions(MainActivity.this,
        new String[]{Manifest.permission.CAMERA}, 1(注:自定义CODE,int类型))


@Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

       permission_bt = (Button) findViewById(R.id.number_permission);
        permission_bt.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                getPermission();
            }
        });

    }

    public void get Permission(){
if (Build.VERSION.SDK_INT >= 23) {
requestPermission();
}
}
public static final int CAMERA_REQUEST_CODE = 0x01;

private void requestPermission() {
        Log.d("requestPermission", "*****" + ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA));
        if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) != PackageManager.PERMISSION_GRANTED) {
            Log.d("requestPermission", "需要获取权限" + ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA));
            // 第一次请求权限时,用户如果拒绝,下一次请求shouldShowRequestPermissionRationale()返回true            
// 向用户解释为什么需要这个权限
            if (ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
                Log.d("requestPermission", "打开dialog获取权限");
                new AlertDialog.Builder(MainActivity.this).setMessage("申请相机权限").setPositiveButton("确定", new DialogInterface.OnClickListener() {
                    @Override
                    public void onClick(DialogInterface dialog, int which) {
                        //申请相机权限
                        ActivityCompat.requestPermissions(MainActivity.this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
                    }
                }).show();
            } else {
                //申请相机权限
                ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.CAMERA}, CAMERA_REQUEST_CODE);
            }
        } else {
            cameraTv.setText("相机权限已申请");
        }
    }


 
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
    Log.d("requestPermission", "onRequestPermissionsResult反应了吗" + ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA));
    if (requestCode == CAMERA_REQUEST_CODE) {
        if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {
            cameraTv.setText("相机权限已申请");
            Log.d("requestPermission", "onRequestPermissionsResult" + ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA));
        } else {
            Log.d("requestPermission", "没有权限,下面在判断下就弹吐司了" + ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA));
            //用户勾选了不再询问
            //提示用户手动打开权限
            if (!ActivityCompat.shouldShowRequestPermissionRationale(this, Manifest.permission.CAMERA)) {
                Toast.makeText(this, "相机权限已被禁止,请在设置中打开", Toast.LENGTH_SHORT).show();
            }
        }
    }
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}


至此,权限申请完毕,各位给个赞哦。
















  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值