如何在Android上检测亮度变化并同步使用?



我在Android应用程序中添加了搜索栏。我可以使用SeekBar改变系统的亮度。

binding.seekBar.setOnSeekBarChangeListener(object : SeekBar.OnSeekBarChangeListener {
@RequiresApi(api = Build.VERSION_CODES.M)
override fun onProgressChanged(p0: SeekBar?, p1: Int, p2: Boolean) {
val permission = Settings.System.canWrite(applicationContext)
if (permission) {
var brightnessValue = p1 * 255 / 100
Settings.System.putInt(
applicationContext.contentResolver,
Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC)
Settings.System.putInt(contentResolver, SCREEN_BRIGHTNESS, brightnessValue)
binding.seekBar.progress = brightnessValue


} else {
val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
intent.data = Uri.parse("package:" + applicationContext.packageName)
startActivityForResult(intent, 0)
}
}

override fun onStartTrackingTouch(p0: SeekBar?) {
}

override fun onStopTrackingTouch(p0: SeekBar?) {

}

})

这是我如何在SeekBar上看到系统的变化。

val contentObserver: ContentObserver = object : ContentObserver(Handler()) {
override fun onChange(selfChange: Boolean) {
val a = Settings.System.getInt(contentResolver, SCREEN_BRIGHTNESS, 0)
Log.d("MainActivity", "Brightness value: $a")
binding.seekBar.progress = a* 255 / 100
}
}
contentResolver.registerContentObserver(
Settings.System.getUriFor(SCREEN_BRIGHTNESS),
false, contentObserver
)   

这是特定于一些小米设备。例如,小米红米Note 7有0-4000范围。官方文档将screen_亮度范围定义为0-255。所以,我认为没有API来获得亮度的最大值。

当我同时使用两者时,代码无法工作。当我从系统中更改它时,以及当我在SeekBar上更改它时,我如何才能使它正确工作?

我不知道你的实际问题是什么,但如果它们单独工作而不是一起工作,你可能会有一个反馈循环,其中搜索栏更改引起亮度变化导致查找栏更改导致亮度变化

如果是这种情况,你可能想看看你的OnSeekbarChangeListener.onProgressChanged回调-你不能从你那里的参数名称,但最后一个参数是一个布尔值,告诉你是否改变是由用户交互引起的(即移动滑块)或不是(即值是通过编程设置的):

public abstract void onProgressChanged (SeekBar seekBar, 
int progress, 
boolean fromUser)

所以你可以在onProgressChanged中检查fromUser,只有当fromUsertrue时才设置系统亮度-否则你的更新是来自亮度变化本身,你不想再设置它。

最新更新