Android开发中权限配置

宁可枝头抱香死,何曾吹落北风中。这篇文章主要讲述Android开发中权限配置相关的知识,希望能为你提供帮助。
对于android开发来说,经常需要申请权限,Android6.0以前,所有权限的配置只需要在配置文件AndroidManifest.xml中编写权限配置就可以了,但Android6.0以后版本中,Google为了提高系统的安全性,当APP需要用到用户隐私权限时需要进行权限配置,除了在配置文件AndroidManifest.xml中编写权限配置之外,还需要手动进行权限适配。申请权限的方式有以下两种:
①、在配置文件AndroidManifest.xml中编写权限配置
②、在逻辑代码中动态申请权限授权
Android权限可以分为两大类:普通权限和高级权限。
一、普通权限
常见的普通权限如下所示。

1 ACCESS_LOCATION_EXTRA_COMMANDS定位权限 2 ACCESS_NETWORK_STATE网络状态权限 3 ACCESS_NOTIFICATION_POLICY通知 APP通知显示在状态栏 4 ACCESS_WIFI_STATE WiFi状态权限 5 BLUETOOTH使用蓝牙权限 6 BLUETOOTH_ADMIN控制蓝牙开关 7 BROADCAST_STICKY粘性广播 8 CHANGE_NETWORK_STATE改变网络状态 9 CHANGE_WIFI_MULTICAST_STATE改变WiFi多播状态,应该是控制手机热点(猜测) 10 CHANGE_WIFI_STATE控制WiFi开关,改变WiFi状态 11 DISABLE_KEYGUARD改变键盘为不可用 12 EXPAND_STATUS_BAR扩展bar的状态 13 GET_PACKAGE_SIZE获取应用安装包大小 14 INTERNET网络权限 15 KILL_BACKGROUND_PROCESSES杀死后台进程 16 MODIFY_AUDIO_SETTINGS改变音频输出设置 17 NFC支付 18 READ_SYNC_SETTINGS获取手机设置信息 19 READ_SYNC_STATS数据统计 20 RECEIVE_BOOT_COMPLETED监听启动广播 21 REORDER_TASKS创建新栈 22 REQUEST_INSTALL_PACKAGES安装应用程序 23 SET_TIME_ZONE允许应用程序设置系统时间区域 24 SET_WALLPAPER设置壁纸 25 SET_WALLPAPER_HINTS设置壁纸上的提示信息,个性化语言 26 TRANSMIT_IR红外发射 27 USE_FINGERPRINT指纹识别 28 VIBRATE震动 29 WAKE_LOCK锁屏 30 WRITE_SYNC_SETTINGS改变设置 31 SET_ALARM设置警告提示 32 INSTALL_SHORTCUT创建快捷方式 33 UNINSTALL_SHORTCUT删除快捷方式

在AndroidManifest.xml文件中的配置方式如下:
1 //XXXX为需要配置的权限名称 2 < uses-permission android:name="android.permission.XXXX"/>

二、高级权限
高级权限如下所示。
1 READ_CALENDAR日历 2 WRITE_CALENDAR日历 3 CAMERA相机 4 READ_CONTACTS联系人 5 WRITE_CONTACTS联系人 6 GET_ACCOUNTS联系人 7 ACCESS_FINE_LOCATION位置 8 ACCESS_COARSE_LOCATION位置 9 RECORD_AUDIO麦克风 10 READ_PHONE_STATE电话 11 CALL_PHONE电话 12 READ_CALL_LOG电话 13 WRITE_CALL_LOG电话 14 ADD_VOICEMAIL电话 15 USE_SIP电话 16 PROCESS_OUTGOING_CALLS电话 17 BODY_SENSORS传感器 18 SEND_SMS短信 19 RECEIVE_SMS短信 20 READ_SMS短信 21 RECEIVE_WAP_PUSH短信 22 RECEIVE_MMS短信 23 READ_EXTERNAL_STORAGE存储 24 WRITE_EXTERNAL_STORAGE 存储

动态权限申请的逻辑代码如下所示(以官方读写内存为例):
1 public void requestAllPower() { 2if (ContextCompat.checkSelfPermission(this, 3Manifest.permission.WRITE_EXTERNAL_STORAGE) 4!= PackageManager.PERMISSION_GRANTED) { 5if (ActivityCompat.shouldShowRequestPermissionRationale(this, 6Manifest.permission.WRITE_EXTERNAL_STORAGE)) { 7} else { 8ActivityCompat.requestPermissions(this, 9new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE, 10Manifest.permission.READ_EXTERNAL_STORAGE}, 1); 11} 12} 13}

判断动态申请权限的结果代码如下:
1 @Override 2public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) { 3super.onRequestPermissionsResult(requestCode, permissions, grantResults); 4 5if (requestCode == 1) { 6for (int i = 0; i < permissions.length; i++) { 7if (grantResults[i] == PERMISSION_GRANTED) { 8Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show(); 9} else { 10Toast.makeText(this, "" + "权限" + permissions[i] + "申请失败", Toast.LENGTH_SHORT).show(); 11} 12} 13} 14}

对于动态权限申请,可以采用封装好的权限申请框架方便的处理权限申请问题,这样有利于代码的重用和整洁性,可以参考以下几个链接:
①、https://blog.csdn.net/fireqiang2/article/details/78343233
②、https://blog.csdn.net/wdd1324/article/details/79402573
③、https://blog.csdn.net/jsxin0816/article/details/78605731
【Android开发中权限配置】④、https://www.jianshu.com/p/52e66d9e4a9a

    推荐阅读