对于Android开发来说我们一般都会需要申请权限,android6.0以上,google为了系统的安全性,当app用到设计到用户隐私的权限的时候需要进行权限适配,所以我们仅仅在AndroidManifest中声明权限还是不够的。需要手动的进行权限适配,因此,在Android开发过程中,申请权限的方式分两种形式。
- 通过配置文件AndroidManifest.xml中编写权限配置。
- 通过在逻辑代码中动态申请权限授权。
简介
基于以上介绍,我们可以将Android权限分为两大类:普通权限、高级权限,那么对应起来,普通权限的申请在配置文件中编写就能实现,而高级权限则需要动态申请并通过人工确认来实现,那么究竟哪些权限属于普通权限,哪些又属于高级权限呢?请看下文。
一、普通权限
1. 常见普通权限列表
权限名称 | 所属权限组 |
---|---|
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 | 删除快捷方式 |
2. 配置文件编写方式
在AndroidManifest.xml文件中的manifest标签下编写权限配置清单代码如下(name中XXXX对应的内容就是上面提到的权限名称):
<uses-permission android:name="android.permission.XXXX"/>
//配置网络权限
<uses-permission android:name="android.permission.INTERNET/>
二、高级权限
1. 高级权限列表
权限名称 | 所属权限组 |
---|---|
READ_CALENDAR | 日历 |
WRITE_CALENDAR | 日历 |
CAMERA | 相机 |
READ_CONTACTS | 联系人 |
WRITE_CONTACTS | 联系人 |
GET_ACCOUNTS | 联系人 |
ACCESS_FINE_LOCATION | 位置 |
ACCESS_COARSE_LOCATION | 位置 |
RECORD_AUDIO | 麦克风 |
READ_PHONE_STATE | 电话 |
CALL_PHONE | 电话 |
READ_CALL_LOG | 电话 |
WRITE_CALL_LOG | 电话 |
ADD_VOICEMAIL | 电话 |
USE_SIP | 电话 |
PROCESS_OUTGOING_CALLS | 电话 |
BODY_SENSORS | 传感器 |
SEND_SMS | 短信 |
RECEIVE_SMS | 短信 |
READ_SMS | 短信 |
RECEIVE_WAP_PUSH | 短信 |
RECEIVE_MMS | 短信 |
READ_EXTERNAL_STORAGE | 存储 |
WRITE_EXTERNAL_STORAGE | 存储 |
2、动态权限申请方法
注意:动态申请的权限必须在配置文件中进行配置
动态申请权限在需要使用权限的地方编写逻辑代码,官方代码如下(以读写内存权限为例):
public void requestAllPower() {
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)
!= PackageManager.PERMISSION_GRANTED) {
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
} else {
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
}
}
判断动态申请权限的结果代码如下:
@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
if (requestCode == 1) {
for (int i = 0; i < permissions.length; i++) {
if (grantResults[i] == PERMISSION_GRANTED) {
Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show();
} else {
Toast.makeText(this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show();
}
}
}
}
3. 小结
对于动态权限申请,可以采用封装好的权限申请框架方便的处理权限申请问题,这样有利于代码的重用和整洁性,由于笔者经验有限,还没有对该类框架进行深入的分析,这里推荐笔者收藏的几个链接供大家参考:
三、总结
笔者经验有限,文章中所有的知识点来自Google官方文档及博客内容,后续会不断丰富技术体系,为大家贡献更加有价值的知识分享,同时也希望看到文章的读者和专家对文中的不妥之处进行指正。
参考文献
- 安卓权限大全-简书作者[GB_speak]
- Android 6.0(API 23)及其以上动态申请的权限与申请权限的方法-CSDN作者[HeTingwei]
- Android6.0权限大全和权限分类-CSDN作者[DaXian-Will]
- Android系统完整的权限列表-CSDN作者[lianyi68]
网友评论