fredzhu
fredzhu
  • 发布:2018-10-23 10:59
  • 更新:2018-10-24 14:58
  • 阅读:1500

【报Bug】调整屏幕亮度错误信息,有更新,请技术看一下

分类:HTML5+

[问题] 安卓系统上,plus.screen.setBrightness 存在Bug. 设置屏幕亮度成功后,仍然报“操作失败,请打开系统设置权限”

[内容]

重现步骤

[步骤] 调用 plus.screen.setBrightness(1)

[结果] 成功调整屏幕亮度,但是报“操作失败,请打开系统设置权限” (纯英文安卓系统也报这个中文错误,应该是HBuilder 自己报的吧)

[期望] 成功调整屏幕亮度,但是不报错

小米手机,MIUI 10.8

“修改系统设置” 权限的确被关闭,但是对比支付宝App, “修改系统设置” 这一项权限也同样没有,但是在显示二维码的时候能成功自动调整屏幕亮度。

貌似HbuilderX在 plus.screen.setBrightness使用Wake_Lock权限之外使用了其他不需要动的系统设置? 估计是想把屏幕亮度写入系统设置? 事实上,这个时候为了扫描二维码,临时点亮屏幕,不需要其他权限。至少给一个 plus.screen.setBrightness(1, false) 这样,不写系统设置的机会吧。

目前默认安卓安装后没有系统设置权限。(小米安装,Nexus6 play store 安装),引起在英文系统下无法避免这个中文报错的问题。
[HBuilder 或 HBuilderX] HBuilderX 1.0

[Android版本号] MIUI 10.8

[手机型号] 小米Mix2 小米Max2

[模拟器型号] 模拟器上无问题

联系方式

[QQ] 4817647

Email: fredzhu_zz@hotmail.com

2018-10-23 10:59 负责人:无 分享
已邀请:
fredzhu

fredzhu (作者)

看到有人说,安卓需要这个“系统设置”权限,这个回答应该是不对的。
原因1: 没有这个权限也成功设置了屏幕亮度
原因2:支付宝App也没开启这个“系统设置”权限,同样可以设置成功也不报任何错误

fredzhu

fredzhu (作者)

我大致知道了。
调节屏幕亮度的方法有两种,一种是
Uri uri = Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
Settings.System.putInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS, brightness);
activity.getContentResolver().notifyChange(uri, null);

另一种是

    WindowManager.LayoutParams lp = context.getWindow().getAttributes();  
    lp.screenBrightness = Float.valueOf(brightness) * (1f / 255f);  
    context.getWindow().setAttributes(lp);  

HBuilder里两种都用了,第一种需要写系统setting权限而第二种不需要写。
实际上估计调用第二种就可以了。至少我的需求里面不需要写系统setting
HBuilder两种都调用,第一种失败报错,第二种调用成功。所以现象是 又成功又报错
建议plus.screen.setBrightness开放参数给我这种需求

fredzhu

fredzhu (作者)

利用原生函数成功。不需要更改系统设置。

如下:

var runtimeActivity = plus.android.runtimeMainActivity();
var w = runtimeActivity.getWindow();
plus.android.importClass(w);
var params=w.getAttributes();
params.plusSetAttribute("screenBrightness",1);

fredzhu

fredzhu (作者)

float值怎么设?
params.plusSetAttribute("screenBrightness",1); 可以
params.plusSetAttribute("screenBrightness",0.5); 不行

(

fredzhu

fredzhu (作者)

推断这个Bug的原因如下:

以前设置屏幕亮度出现过bug,有人报告设置屏幕亮度无效,技术组发现plusSetAttribute("screenBrightness",0.5)这种的确有问题,数据类型转换有问题,设置不了,
但是偷懒,不愿意解决问题。就把Settings.System.putInt方法给用上了,每次调屏幕亮度就设置两次,一次系统设置Settings.System.putInt,一次plusSetAttribute("screenBrightness"),失败了一种还有另一种嘛。
没想到在英文系统下即使成功设置了亮度也会出现中文提示报错。

根本的解决方法应该是plusSetAttribute("screenBrightness",0.5)参数支持float。 看看数据转换哪里有问题,这才是解决问题的根本方法嘛。
plus.screen.setBrightness应该支持两种Mode,给出第二个参数: plus.screen.setBrightness(0.5,mode1)

该问题目前已经被锁定, 无法添加新回复