动态权限

//首先要来清单文件中添加上关于相机的权限

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

//布局文件不再多说这里只做了一个Demo

 

//MainActivity 的单击事件

//click单击事件


 
  1. public void click(View view) {

  2.  
  3. //去寻找是否已经有了相机的权限

  4. if (ContextCompat.checkSelfPermission(this, Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED){

  5.  
  6. //Toast.makeText(MainActivity.this,"您申请了动态权限",Toast.LENGTH_SHORT).show();

  7. //如果有了相机的权限有调用相机

  8. startCamera();

  9.  
  10. }else{

  11. //否则去请求相机权限

  12. ActivityCompat.requestPermissions(this,new String[]{Manifest.permission.CAMERA},100);

  13.  
  14. }

  15.  
  16. }

//请求回来的结果会在这个方法中 返回


 
  1. @Override

  2. public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults{

  3. super.onRequestPermissionsResult(requestCode, permissions, grantResults);

  4.  
  5. switch (requestCode){

  6. //如果requestCode为100 就走这里

  7. case 100:

  8.  
  9. //permissions[0].equals(Manifest.permission.CAMERA)

  10. //grantResults[0] == PackageManager.PERMISSION_GRANTED

  11. //上面的俩个判断可有可无

  12. if (permissions[0].equals(Manifest.permission.CAMERA)){

  13.  
  14. if (grantResults[0] == PackageManager.PERMISSION_GRANTED){

  15. //如果用户同意了再去打开相机

  16. Toast.makeText(MainActivity.this,"非常感谢您的同意,再会",Toast.LENGTH_SHORT).show();

  17. startCamera();

  18.  
  19. }else{

  20. //因为第一次的对话框是系统提供的 从这以后系统不会自动弹出对话框 我们需要自己弹出一个对话框

  21. //进行询问的工作

  22. startAlertDiaLog();

  23.  
  24. }

  25.  
  26. }

  27.  
  28. break;

  29.  
  30. }

  31.  
  32. }

//创建一个AlertDiaLog 引导用户打开相机权限


 
  1. public void startAlertDiaLog(){

  2.  
  3. AlertDialog.Builder alert = new AlertDialog.Builder(MainActivity.this);

  4.  
  5. alert.setTitle("说明");

  6. alert.setMessage("需要相机权限 去拍照");

  7. alert.setPositiveButton("立即开启", new DialogInterface.OnClickListener() {

  8. @Override

  9. public void onClick(DialogInterface dialog, int which) {

  10.  
  11. //这里的立即开启 是打开手机的设置页面(打开相机权限)

  12. startSetting();

  13.  
  14. }

  15. });

  16. alert.setNegativeButton("取消", new DialogInterface.OnClickListener() {

  17. @Override

  18. public void onClick(DialogInterface dialog, int which) {

  19. //如果用户还不打开 只能等用户下次点击时再次询问

  20. Toast.makeText(MainActivity.this,"当您点击我们会再次询问",Toast.LENGTH_SHORT).show();

  21.  
  22. }

  23. });

  24. alert.create();

  25. alert.show();

  26.  
  27. }

//打开手机的设置页面 让用户自己打开相机权限


 
  1. public void startSetting(){

  2.  
  3. Intent intent = new Intent();

  4.  
  5. intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);

  6.  
  7. Uri uri = Uri.fromParts("package",getPackageName(),null);

  8.  
  9. intent.setData(uri);

  10.  
  11. startActivityForResult(intent,10);

  12.  
  13. }

//当用户从设置页面回来的时候 我们还需要去 查询用户是否已经开启了 相机权限


 
  1. @Override

  2. protected void onActivityResult(int requestCode, int resultCode, Intent data) {

  3. super.onActivityResult(requestCode, resultCode, data);

  4.  
  5. if (requestCode == 10 && resultCode == RESULT_OK){

  6.  
  7. if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.CAMERA) == PackageManager.PERMISSION_GRANTED){

  8.  
  9. Toast.makeText(MainActivity.this,"非常感谢您的同意",Toast.LENGTH_SHORT).show();

  10.  
  11. }else{

  12.  
  13. }

  14.  
  15. }

  16.  
  17. }

 

//打开相机


 
  1. public void startCamera(){

  2.  
  3. Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);

  4.  
  5. startActivityForResult(intent, 0);

  6.  
  7. }

                   我们各位看官都已经发现,6.0动态权限的实现是有些复杂的

个人建议 在实际的项目开发中 还是寻求一些 动态访问权限的框架 可以省去一些代码.

                                  也希望这篇文章 能给你带来一些帮助.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

梦想不上班

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值