2019独角兽企业重金招聘Python工程师标准>>>

Android 6.0起权限管理更严格了,朝着IOS权限靠拢了。看来Android也慢慢朝着封闭的方向发展了。如果 targetSdkVersion <23,就没有动态权限问题,但这不是长久之计,迟早要适配的。

Android将权限分为3种:

  • 普通权限(Normal Permissions)
  • 危险权限(Dangerous Permissions)
  • 特殊权限(Special Permissions)

如果 targetSdkVersion>=23 那么就要对 危险权限和 特殊权限动态申请

危险权限(Dangerous Permissions)

Permission Group Permissions
CALENDAR READ_CALENDAR <br/>WRITE_CALENDAR
CAMERA CAMERA
CONTACTS READ_CONTACTS <br/>WRITE_CONTACTS <br/>GET_ACCOUNTS
LOCATION ACCESS_FINE_LOCATION <br/>ACCESS_COARSE_LOCATION
MICROPHONE RECORD_AUDIO
PHONE READ_PHONE_STATE<br/> CALL_PHONE <br/>READ_CALL_LOG <br/>WRITE_CALL_LOG <br/>ADD_VOICEMAIL USE_SIP <br/>PROCESS_OUTGOING_CALLS
SENSORS BODY_SENSORS
SMS SEND_SMS <br/>RECEIVE_SMS <br/>READ_SMS<br/> RECEIVE_WAP<br/>_PUSH RECEIVE_MMS
STORAGE READ_EXTERNAL_STORAGE<br/> WRITE_EXTERNAL_STORAGE

危险权限基本都涉及到用户的隐私,Android系统将这些危险权限分为9组,

获取分组中某个权限的同时也就获取了同组中的其他权限

危险权限不仅需要在 AndroidManifest.xml中注册,还需要动态的申请权限

EasyPermisson 是Google对动态权限申请的封装,Google出品必属精品;

添加依赖

dependencies {compile 'pub.devrel:easypermissions:0.2.1'
}

AndroidManifest添加权限

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

添加实现(以相机权限为例子)

public class MainActivity extends AppCompatActivity implements  EasyPermissions.PermissionCallbacks{private static final String TAG="tag";private static final int CAMERA_PERM = 0x100;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);grantCamera();}private void openCamera(){}@AfterPermissionGranted(CAMERA_PERM)private void grantCamera() {if (EasyPermissions.hasPermissions(MainActivity.this, Manifest.permission.CAMERA)) {//有此权限openCamera();} else {//没有此权限,需要重新申请EasyPermissions.requestPermissions(this, "请求camera权限", CAMERA_PERM, Manifest.permission.CAMERA);}}@Overridepublic void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {super.onRequestPermissionsResult(requestCode, permissions, grantResults);EasyPermissions.onRequestPermissionsResult(requestCode, permissions, grantResults, this);}@Overridepublic void onPermissionsGranted(int requestCode, List<String> perms) {Log.d(TAG,"success");}@Overridepublic void onPermissionsDenied(int requestCode, List<String> perms) {if (EasyPermissions.somePermissionPermanentlyDenied(this, perms)) {new AppSettingsDialog.Builder(this, "点击确定去设置界面设置权限").setTitle("Title").setPositiveButton("确定").setNegativeButton("取消", null /* click listener */).setRequestCode(requestCode).build().show();}}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == CAMERA_PERM) {//从设置权限界面返回if (EasyPermissions.hasPermissions(MainActivity.this, Manifest.permission.CAMERA)){}}}
}

@AfterPermissionGranted(CAMERA_PERM)注解是在用户同意授权后EasyPermissions再次回调注解的函数;AppSettingsDialog 是googgle封装的直接跳转到设置权限界面dialog;

特殊权限(Special Permissions)

Special Permissions
SYSTEM_ALERT_WINDOW 设置悬浮窗
WRITE_SETTINGS 修改系统设置

特殊权限比危险权限更危险,特殊权限需要在manifest中申请并且通过发送Intent让用户在设置界面进行勾选.


public class MainActivity extends AppCompatActivity implements  EasyPermissions.PermissionCallbacks{private static final int SYSTEM_ALERT_WINDOW_PERM = 0x101;private static final int WRITE_SETTINGS_PERM = 0x102;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);grantAlertWindow();grantWriteSettings();}private void grantAlertWindow(){Intent intent = new Intent(Settings.ACTION_MANAGE_OVERLAY_PERMISSION);intent.setData(Uri.parse("package:" + getPackageName()));startActivityForResult(intent, SYSTEM_ALERT_WINDOW_PERM);}private void grantWriteSettings(){Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);intent.setData(Uri.parse("package:" + getPackageName()));startActivityForResult(intent, WRITE_SETTINGS_PERM );}@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) {super.onActivityResult(requestCode, resultCode, data);if (requestCode == SYSTEM_ALERT_WINDOW_PERM) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if ( Settings.canDrawOverlays(this)){//get}}}else if (requestCode == WRITE_SETTINGS_PERM) {if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {if (Settings.System.canWrite(this)) {//get}}}}
}

转载于:https://my.oschina.net/yale8848/blog/829996

EasyPermisson 动态权限使用例子相关推荐

  1. SpringBoot整合mybatis、shiro、redis实现基于数据库的细粒度动态权限管理系统实例(转)...

    SpringBoot整合mybatis.shiro.redis实现基于数据库的细粒度动态权限管理系统实例 shiro 目录(?)[+] 前言 表结构 maven配置 配置Druid 配置mybatis ...

  2. delphi android动态权限,DELPHI安卓动态权限申请

    DELPHI安卓动态权限申请 安卓8.0以前的版本,只需要给静态权限就可以了,但安卓8.0及以后的版本,还需要运行期用代码动态申请权限. 下面以<蓝牙权限>为例,其他权限类似. Delph ...

  3. android权限适配 简书,Android动态权限适配

    最近APP里面要添加动态权限,网上找了不少例子并经过一定的测试,基本流程有了一定的认识,需要注意的地方记录下来以备以后查阅. 一 各大手机厂商的适配 依据各大手机Rom的不同表现,可以分为三种不同的模 ...

  4. 二维码的扫描与生成(含动态权限)

    首页 博客 学院 下载 GitChat TinyMind 论坛 问答 商城 VIP 活动 招聘 ITeye CSTO 写博客 发Chat cjm2484836553的博客 RSS订阅 原 Androi ...

  5. 最容易理解的Android6.0动态权限申请教程

    1.前言 这已经是N年前的知识点了,但是我一直以来都有点逃避学习这个,而且印象中很麻烦,后来也不间断有学习过一点,但是一直没认真去用过,所以对这个android6.0的动态权限申请一直是不清楚的状态, ...

  6. SpringBoot 整合 Shiro 实现动态权限加载更新+ Session 共享 + 单点登录

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试资料 来源: juejin.im/post/5d087d60518825 ...

  7. android 6.0权限库,Android 6.0动态权限适配

    前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...

  8. Android动态权限管理模型(4.3-6.0)

    Google从4.3开始就试图引入AppOpsManager动态权限管理模型,但是,由于感觉技术不太成熟,在Release版本中,这个功能都是被隐藏掉的,所以官方Rom一直没有动态权限管理机制.直到A ...

  9. Spring Boot 2.6之后,动态权限控制终于可以用起来了!

    Spring Security 5.6 发布有些时间了.随着Spring Boot 2.6的发布Spring Security 5.6终于有机会上生产了.在Spring Security 5.6中动态 ...

最新文章

  1. 【spring-boot】启用数据缓存功能
  2. 经典营销模型的产品化介绍
  3. 机器学习之 weka学习(六)最大内存
  4. Web前端期末大作业--绿色自适应医疗健康医院网页设计(HTML+CSS+JavaScript+)实现
  5. HTTP之Cookie
  6. jenkins配置sonar并扫描C#代码
  7. 蓝牙版本avrcp怎么选_新款AirPods怎么选?还是不算好耳机,但是最配的iPhone蓝牙耳机...
  8. 海量Oracle学习视频分享
  9. 【书影观后感 五】你的名字
  10. 激励人生成功的10句经典英文
  11. gcc编译工具常用命令以及汇编语言
  12. mysql 小球_c语言编程实例——小球跳动
  13. python中国剩余定理公式_《孙子算经》之物不知数题:中国剩余定理
  14. asar文件用什么打开_AppData可以删除吗?AppData文件夹是什么用的?
  15. 图解TCP/IP读书笔记(一)
  16. OJ:Bad Cowtractors(最大生成树)
  17. (立下flag)每日10道前端面试题-15 关于【高级技巧】十问
  18. OxyPlot在WinForm中的应用
  19. 静态网页爬虫教程(5)带翻页的多篇文章内容提取和保存
  20. 金融机构银行架构变迁

热门文章

  1. C# 串口操作系列(1) -- 入门篇,一个标准的,简陋的串口例子。
  2. Wijmo 更优美的jQuery UI部件集:在安全站点使用Wijmo控件
  3. Word 2007翻译里一个诡异的问题——微软的疏忽还是一个Joke?
  4. 怎样将Datatable中的数据直接导入到Excel模板上
  5. Facebook 开源 Instagram 的Python 代码静态安全分析工具 Pysa
  6. 万万没想到:从啤酒评分 app 中竟能找到情报人员和军人的敏感信息
  7. 2020年智能物联网设备数量将达204亿,是智能为王还是服务为王?
  8. java web 加载Spring --web.xml 篇
  9. Bootstrap 基础五表格
  10. 新练习作,实验室网站首页——未采用