Android6.0运行时权限

本文介绍了Android6.0系统引入的运行时权限变化及其对项目的影响。主要探讨了两种实现权限处理的方法:原生实现和使用MPermissions框架,并提供了相关库的链接和参考文章。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一.概述
Android6.0发布一年多时间,带来了一些新的api变化,越来越多的手机倾向于使用Android6.0以上的系统,随之改变的是越来越多的项目要适配6.0的系统。

本篇文章目的就是对运行时权限处理的一个介绍,以及对目前权限相关的库的一些了解。

这里引用郭霖对android运行时权限的总结,一共9组24个权限,只有在android6.0 及以上的手机上使用这些权限时,要进行运行时权限处理(仍需要在manifest文件中注册相关权限).

二.实现方式

  1. 原生实现方式

申请单个权限
这里写图片描述

2.使用MPermissions框架

private static final int MY_PERMISSIONS_REQUEST_CAMERA =1;
@OnClick({R.id.bt_scan_qrcode})
public void onViewClicked(View view) {
  switch (view.getId()) {
    case R.id.bt_scan_qrcode:
    //使用MPermissions来动态申请权限                           MPermissions.requestPermissions(QRCodeActivity.this, MY_PERMISSIONS_REQUEST_CAMERA, Manifest.permission.CAMERA);
      break;
    }
 }
@Override
public void onRequestPermissionsResult( int requestCode, String[] permissions,int[] grantResults{
     MPermissions.onRequestPermissionsResult(this, requestCode, permissions, grantResults);
     super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    }

@PermissionGrant(MY_PERMISSIONS_REQUEST_CAMERA)
public void requestSdcardSuccess(){
    Toast.makeText(this, "GRANT ACCESS SDCARD!", Toast.LENGTH_SHORT).show();
    startActivity(new Intent(this, ScanQRCodeActivity.class));
 }

@PermissionDenied(MY_PERMISSIONS_REQUEST_CAMERA)
public void requestSdcardFailed(){
Toast.makeText(this, "DENY ACCESS SDCARD!", private static final int MY_PERMISSIONS_REQUEST_CAMERA= 1;
  @OnClick({R.id.bt_scan_qrcode})
  public void onViewClicked(View view) {
      switch (view.getId()) {
         case R.id.bt_scan_qrcode:
            //使用MPermissions来动态申请权限
            MPermissions.requestPermissions(QRCodeActivity.this, MY_PERMISSIONS_REQUEST_CAMERA, Manifest.permission.CAMERA);
                break;
        }


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

@PermissionGrant(MY_PERMISSIONS_REQUEST_CAMERA)
public void requestSdcardSuccess(){
   Toast.makeText(this, "GRANT ACCESS SDCARD!", Toast.LENGTH_SHORT).show();
   startActivity(new Intent(this, ScanQRCodeActivity.class));
  }

@PermissionDenied(MY_PERMISSIONS_REQUEST_CAMERA)
public void requestSdcardFailed(){
   Toast.makeText(this, "DENY ACCESS SDCARD!", Toast.LENGTH_SHORT).show();
   }
 }

用法简单明了,对于onRequestPermissionsResult所有的Activity都是一致的,所以可以放到BaseActivity中去。此外,在Fragment中使用的方式一致,详见库(https://github.com/hongyangAndroid/MPermissions.)

参考
(http://blog.youkuaiyun.com/lmj623565791/article/details/50709663)
(http://blog.youkuaiyun.com/m0_37168878/article/details/64437654)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值