Android开发中权限配置

Posted 嗨_放飞梦想

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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() {
 2         if (ContextCompat.checkSelfPermission(this,
 3                 Manifest.permission.WRITE_EXTERNAL_STORAGE)
 4                 != PackageManager.PERMISSION_GRANTED) {
 5             if (ActivityCompat.shouldShowRequestPermissionRationale(this,
 6                     Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
 7             } else {
 8                 ActivityCompat.requestPermissions(this,
 9                         new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
10                                 Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
11             }
12         }
13     }

  判断动态申请权限的结果代码如下:

 1 @Override
 2     public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
 3         super.onRequestPermissionsResult(requestCode, permissions, grantResults);
 4 
 5         if (requestCode == 1) {
 6             for (int i = 0; i < permissions.length; i++) {
 7                 if (grantResults[i] == PERMISSION_GRANTED) {
 8                     Toast.makeText(this, "" + "权限" + permissions[i] + "申请成功", Toast.LENGTH_SHORT).show();
 9                 } else {
10                     Toast.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

  ④、https://www.jianshu.com/p/52e66d9e4a9a

以上是关于Android开发中权限配置的主要内容,如果未能解决你的问题,请参考以下文章

我的Android进阶之旅NDK开发之在C++代码中使用Android Log打印日志,打印出C++的函数耗时以及代码片段耗时详情

Android 逆向Android 进程注入工具开发 ( Visual Studio 开发 Android NDK 应用 | Visual Studio 中 SDK 和 NDK 安装位置 )(代码片段

片段中的Android webView显示空白页面

Android开发常用代码片段

在android中显示隐藏片段

任何更改后的 Android Firebase 数据库活动/片段正在关闭