第一步,我们需要到AndroidManifest.xml中申请权限:
之所以加上tools:ignore="ProtectedPermissions"
是因为改变系统设置的权限一般只归系统App所有,所以编译器会报一个警告,加上这个可以忽略警告。
4.2 申请动态权限
如果你的手机系统是Android6.0以上的,那么还得动态申请权限。系统设置权限的动态申请有点特别,它需要跳转到系统的“可修改系统设置”界面,让用户决定是否允许当前应用修改系统设置,然后再在onActivityResult
中处理回调结果。
我们在进入BrightnessActivity
时就动态申请权限,代码如下:
//修改系统屏幕亮度需要修改系统设置的权限
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//如果当前平台版本大于23平台
if (!Settings.System.canWrite(mContext)) {
val intent = with(Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)) {
data = Uri.parse(“package:$packageName”)
this
}
startActivityForResult(intent, RQ_WRITE_SETTINGS)
} else {
changeSystemBrightness()
}
} else {
//Android6.0以下的系统则直接修改亮度
changeSystemBrightness()
}
首先调用Settings.System.canWrite(Context)
判断手机系统,Android6.0以下的直接允许修改亮度的操作;Android6.0以上的则要进一步判断是否已经获得了修改系统设置的权限,没有的话就要打开如下界面去设置。
无论用户是否授权,我们都需要一个回调,这时onActivityResult
就可以派上用场了:
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
when (requestCode) {
RQ_WRITE_SETTINGS -> {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Settings.System.canWrite(mContext)) {
shortToast(“已获取权限”)
changeSystemBrightness()<