赞
踩
创建一个BrightnessActivity
,然后在里面放置两个进度条,一个改变系统亮度,一个改变窗口亮度。为了便于以后使用,我们会把用到的方法都封装到一个工具类中。所以再创建一个名称为BrightnessUtil
的Kotlin文件,但是不要创建类,因为我们会使用扩展成员的方式来编写工具类。
温馨提示:最近大半年都在使用Kotlin,这实在是一门很棒的语言,推荐大家学习。以后的博客我一般都会使用Kotlin了。
在这里由于文字较多,我总结了一份高阶Android技术大纲和学习资料以及 项目源码 免费分享给大家,文末有领取!
首先来看看怎么改变窗口亮度。十分简单,只需改变窗口属性中的屏幕亮度(screenBrightness
)一项。让我们直接来看代码:
/**
改变窗口亮度的上下文必须是Activity
,所以我给Activity
加了一个扩展属性windowBrightness
,它的值就是当前的窗口亮度,改变它的值就可以改变窗口亮度。它的范围是0~1.0,从0到1.0亮度逐渐增大;如果赋值为-1,那就表示跟随系统的亮度。
使用起来也很简单:
tvWindowBright.text = “当前窗口亮度=KaTeX parse error: Expected '}', got 'EOF' at end of input: …text = "当前窗口亮度=windowBrightness”
}
override fun onStartTrackingTouch(seekBar: SeekBar?) {
}
override fun onStopTrackingTouch(seekBar: SeekBar?) {
}
})
没有接触过Kotlin的小伙伴们可能会不知道这属性在Java中怎么用?毕竟我们连类名都没有看到。其实Kotlin会默认为Java生成一个“类名+kt”的类,属性则会生成getter和setter静态方法。所以在Java代码中只需要 这么写:
BrightnessUtilKt.getWindowBrightness(Activity);
BrightnessUtilKt.setWindowBrightness(Activity,brightness);
比起改变窗口亮度,改变系统亮度就要麻烦一点了。作为个人,我们改变世界都是不容易的,那么一个应用想要改变系统自然也不会轻而易举。
第一步,我们需要到AndroidManifest.xml中申请权限:
之所以加上tools:ignore="ProtectedPermissions"
是因为改变系统设置的权限一般只归系统App所有,所以编译器会报一个警告,加上这个可以忽略警告。
如果你的手机系统是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()
} else {
shortToast(“你拒绝了权限”)
}
}
}
}
}
代码很简单,就不做过多解释了。
前面我们虽然解决了权限问题,但是还要考虑到一个实际情况,那就是用户可能会设置了自动亮度,在这个前提下是无法改变系统屏幕亮度的。所以这里要做两步处理:
我们在工具类中添加isAutoBrightness
属性,它只有Getter方法,返回一个布尔值。这里调用Settings.System.getInt()
方法,第二个参数传入 Settings.System.SCREEN_BRIGHTNESS_MODE
表示我们要获取系统屏幕亮度模式,如果是Settings.System.SCREEN_BRIGHTNESS_MODE
,则表示当前自动亮度模式。
val isAutoBrightness:Boolean
get() = try {
Settings.System.getInt(
AndUtil.appContext.contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE
) == Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC
} catch (e: Settings.SettingNotFoundException) {
e.printStackTrace()
false
}
前面我们获取了系统亮度模式,通过设置它的值,我们就可以控制自动亮度模式的开关了。
在工具类中创建一个setAutoBrightness()
函数,如果设置成功就返回true。这里用到的是Settings.System.putInt()
,第二个参数即为我们要设置的亮度模式。当参数enable
为true时就是自动模式了。
/**
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数初中级Android工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Android移动开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Android开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注:Android)
如果你进阶的路上缺乏方向,可以加入我们的圈子和安卓开发者们一起学习交流!
Android进阶学习全套手册
Android对标阿里P7学习视频
BATJ大厂Android高频面试题
最后,借用我最喜欢的乔布斯语录,作为本文的结尾:
人这一辈子没法做太多的事情,所以每一件都要做得精彩绝伦。
你的时间有限,所以不要为别人而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。
最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
而活。不要被教条所限,不要活在别人的观念里。不要让别人的意见左右自己内心的声音。
最重要的是,勇敢的去追随自己的心灵和直觉,只有自己的心灵和直觉才知道你自己的真实想法,其他一切都是次要。
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。