美文网首页
Android开发-权限配置总结

Android开发-权限配置总结

作者: CoderLPF0827 | 来源:发表于2018-12-05 11:14 被阅读0次

对于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官方文档及博客内容,后续会不断丰富技术体系,为大家贡献更加有价值的知识分享,同时也希望看到文章的读者和专家对文中的不妥之处进行指正。

参考文献

  1. 安卓权限大全-简书作者[GB_speak]
  2. Android 6.0(API 23)及其以上动态申请的权限与申请权限的方法-CSDN作者[HeTingwei]
  3. Android6.0权限大全和权限分类-CSDN作者[DaXian-Will]
  4. Android系统完整的权限列表-CSDN作者[lianyi68]

转载请注明出处:https://www.jianshu.com/p/52e66d9e4a9a

相关文章

网友评论

      本文标题:Android开发-权限配置总结

      本文链接:https://www.haomeiwen.com/subject/zoqicqtx.html