Android10动态权限提前,Android动态权限管理

66b52468c121889b900d4956032f1009.png

8种机械键盘轴体对比

本人程序员,要买一个写代码的键盘,请问红轴和茶轴怎么选?

苦逼的加班生活终于要告一段落了,可以闲下来做一下最近工作中遇到的一些问题和相对应的解决方案。此篇文章主要用来记录Android6.0的权限管理。

权限介绍

Android从6.0(API23)之后开始出现动态权限的管理(Run),虽然对用户来说是个不错的安全体验(控制客户端对系统隐私信息的访问),却加大了我们程序员的工作量,新的权限获取方式除了和之前一样需要在AndroidMainfest文件中静态申请外,还需要在使用的地方动态的去先用户请求授权。当然这些权限也可以再系统设置的应用管理处手动的打开和关闭。当然,并不是所有的权限都需要动态的获取,安卓系统权限分为两类,正常权限和危险权限。

正常权限

正常权限不会给用户的隐私带来风险,直接在AndroidMainfest中静态申请即可(例如网络权限),安装时系统会自动授权。这类权限包括:android.permission.ACCESS_LOCATION_EXTRA_COMMANDS

android.permission.ACCESS_NETWORK_STATE

android.permission.ACCESS_NOTIFICATION_POLICY

android.permission.ACCESS_WIFI_STATE

android.permission.ACCESS_WIMAX_STATE

android.permission.BLUETOOTH

android.permission.BLUETOOTH_ADMIN

android.permission.BROADCAST_STICKY

android.permission.CHANGE_NETWORK_STATE

android.permission.CHANGE_WIFI_MULTICAST_STATE

android.permission.CHANGE_WIFI_STATE

android.permission.CHANGE_WIMAX_STATE

android.permission.DISABLE_KEYGUARD

android.permission.EXPAND_STATUS_BAR

android.permission.FLASHLIGHT

android.permission.GET_ACCOUNTS

android.permission.GET_PACKAGE_SIZE

android.permission.INTERNET

android.permission.KILL_BACKGROUND_PROCESSES

android.permission.MODIFY_AUDIO_SETTINGS

android.permission.NFC

android.permission.READ_SYNC_SETTINGS

android.permission.READ_SYNC_STATS

android.permission.RECEIVE_BOOT_COMPLETED

android.permission.REORDER_TASKS

android.permission.REQUEST_INSTALL_PACKAGES

android.permission.SET_TIME_ZONE

android.permission.SET_WALLPAPER

android.permission.SET_WALLPAPER_HINTS

android.permission.SUBSCRIBED_FEEDS_READ

android.permission.TRANSMIT_IR

android.permission.USE_FINGERPRINT

android.permission.VIBRATE

android.permission.WAKE_LOCK

android.permission.WRITE_SYNC_SETTINGS

com.android.alarm.permission.SET_ALARM

com.android.launcher.permission.INSTALL_SHORTCUT

com.android.launcher.permission.UNINSTALL_SHORTCUT

危险权限

危险权限会授予应用机密数据的权限,如果在应用运行时需要申请危险权限,则必须用户明确统一使用这些权限后才能进行先关操作。例如:能够读取用户的联系人属于危险权限。如果应用声明其需要危险权限,则用户必须明确明确向用户授予其权限。同一权限组下的权限,用户只要同意其中一种,同组其他权限也相应获取到。

检查权限

如果您的应用需要危险权限,则每次执行需要这一权限的操作时,都需要先检查自己是否具有该权限。用户始终可以自由调用该权限,因此即使用户上次同意了使用该权限,下次也不能默认仍有该权限。

要检查应用是否有该权限,需要调用 ContextCompat.checkSelfPermission() 方法。例如:下面这段代码用来检测Activity是否拥有调用相机的权限。// Assume thisActivity is the current activity

int permissionCheck = ContextCompat.checkSelfPermission(thisActivity,

Manifest.permission.CAMERA);

如果应用已有此权限,则会返回PackageManager.PERMISSION_GRANTED,并且应用可以继续操作。如果应用不具有此权限,方法将返回 PERMISSION_DENIED,且应用必须明确向用户要求权限。

请求需要的权限

上一步我们进行了权限的检查,如果当前应用尚未授权该权限,则需要调用一个 requestPermissions()) 方法,以请求适当的权限。此方法是异步执行方法。if (ContextCompat.checkSelfPermission(thisActivity,

Manifest.permission.READ_CONTACTS)

!= PackageManager.PERMISSION_GRANTED) {

if (ActivityCompat.shouldShowRequestPermissionRationale(thisActivity,

Manifest.permission.READ_CONTACTS)) {

//用户引导操作

} else {

//权限申请

ActivityCompat.requestPermissions(thisActivity,

new String[]{Manifest.permission.READ_CONTACTS},

MY_PERMISSIONS_REQUEST_READ_CONTACTS);

}

}

确认权限回调

此步用来判断用户是否确认了权限onRequestPermissionResult ()@Override

public void onRequestPermissionsResult(int requestCode,

String permissions[], int[] grantResults) {

switch (requestCode) {

case MY_PERMISSIONS_REQUEST_READ_CONTACTS: {

// 如果结果为空,则用户取消授权

if (grantResults.length > 0

&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {

// 权限申请成功,进行下一步操作

} else {

// 权限申请失败,展示相关提示

}

return;

}

}

}

第三方工具库

结语

这就是通过6.0之后版本的权限的相关总结,不管你懂没懂,这个工作在日后的开发工作中无可避免,不过如果只是简单的使用,只需要引入第三方工具库即可以非常便利的处理这类问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值