标签:out disable 改变 问题 contact 网络状态 sdn res 失败
对于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
标签:out disable 改变 问题 contact 网络状态 sdn res 失败
原文地址:https://www.cnblogs.com/chenfeifen/p/11774339.html