Quantcast
Channel: Sam的技术Blog
Viewing all articles
Browse latest Browse all 158

Android6.0权限学习

$
0
0
作者: Sam (甄峰)  sam_code@hotmail.com

很久没有做Android App了。最近在搞Camera程序时,突然发现Android6.0后, 权限思路使用有了较大不同。现记录,学习,摘抄如下: 

1. Android 6(API23)的动态权限: 
Android 6.0+ 版本, 不再像之前版本那样在安装阶段询问用户是否同意APP所要求的一大堆权限。 而是在APP执行危险行为前,向用户即时发送请求。若用户同意,才执行此危险操作。

在APP开发层面, Android 6.0之前,只需要在清单文件中添加权限即可。这些权限会在App安装时显示出来。
而在Android6.0和以上版本, 对危险权限,除了在清单文件添加权限,还需要在程序中动态申请。 比如在需要打开Camera时,需要动态申请权限。直到用户同意,才能正常使用。

普通权限: 

ACCESS_LOCATION_EXTRA_COMMANDS 定位权限

ACCESS_NETWORK_STATE 网络状态权限

ACCESS_NOTIFICATION_POLICY 通知 APP通知显示在状态栏

ACCESS_WIFI_STATE WiFi状态权限

BLUETOOTH 使用蓝牙权限

BLUETOOTH_ADMIN 控制蓝牙开关

BROADCAST_STICKY 粘性广播

CHANGE_NETWORK_STATE 改变网络状态

CHANGE_WIFI_MULTICAST_STATE 改变WiFi多播状态,应该是控制手机热点(猜测)

CHANGE_WIFI_STATE 控制WiFi开关,改变WiFi状态

DISABLE_KEYGUARD 改变键盘为不可用

EXPAND_STATUS_BAR 扩展bar的状态

GET_PACKAGE_SIZE 获取应用安装包大小

INTERNET 网络权限

KILL_BACKGROUND_PROCESSES 杀死后台进程

MODIFY_AUDIO_SETTINGS 改变音频输出设置

NFC 支付

READ_SYNC_SETTINGS 获取手机设置信息

READ_SYNC_STATS 数据统计

RECEIVE_BOOT_COMPLETED 监听启动广播

REORDER_TASKS 创建新栈

REQUEST_INSTALL_PACKAGES 安装应用程序

SET_TIME_ZONE 允许应用程序设置系统时间区域

SET_WALLPAPER 设置壁纸

SET_WALLPAPER_HINTS 设置壁纸上的提示信息,个性化语言

TRANSMIT_IR 红外发射

USE_FINGERPRINT 指纹识别

VIBRATE 震动

WAKE_LOCK 锁屏

WRITE_SYNC_SETTINGS 改变设置

SET_ALARM 设置警告提示

INSTALL_SHORTCUT 创建快捷方式

UNINSTALL_SHORTCUT 删除快捷方式

以上这些只是普通权限,我们开发的时候,正常使用就行了,需要的权限在清单文件配置即可。

 

危险权限

这类权限需要在需要的时候,需要我们动态申请,比如:当我们需要打开相机拍摄照片的时候需要我们通过代码的方式在需要的地方去申请权限。Android6.0中权限问题中我们需要注意的是:

1:由于权限API的问题,我们的Actiivty最好是AppCompatActivity类型的,也就是说在你的BaseActivity需要继承AppCompatActivity

2:权限是分组的,同一组的权限申请其中一个,同组的权限就全部都申请了

 

特殊权限 组:

CALENDAR 日历

CAMERA 相机

CONTACTS 联系人

LOCATION 定位

MICROPHONE 麦克相关,比如录音

PHONE 手机状态

SENSORS 传感器

SMS 短信

STORAGE 存储权限


  • int checkSelfPermission(String permission) 用来检测应用是否已经具有权限,这个方法是在API23中才有的,为了兼容低版本,建议使用v4包中的ContextCompat.checkSelfPermission,在下面的注意事项中有解释,这里就不在赘述了

  • void requestPermissions(String[] permissions, int requestCode) 进行请求单个或多个权限,第一个参数是请求的权限集合,第二个参数是请求码,在回调监听中可以用来判断是哪个权限请求的结果

  • void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) 用户对请求作出响应后的回调,请求成功或者失败的监听

  • shouldShowRequestPermissionRationale这个API可以帮我们判断接下来的对话框是否包含”不再询问“选择框。在6.0之前的版本永远返回的是fasle



关于Camera, 有个项目很有意思: 
https://github.com/saki4510t/UVCCamera

 

Viewing all articles
Browse latest Browse all 158

Trending Articles