【问题标题】:Setting the brightness in Android - Nothing worked so far在 Android 中设置亮度 - 到目前为止没有任何效果
【发布时间】:2012-03-07 17:52:23
【问题描述】:

您好,我尝试了网络上和 SO 中的所有解决方案,但没有任何效果。我有一个覆盖(服务),当您单击触发器时会弹出全屏。在覆盖层上,我放置了一些快捷方式、音量控制和亮度控制。关键是无论我做什么亮度都不会立即改变屏幕(我需要关闭和打开屏幕)。

这就是我在更新亮度滑块时所说的:

@Override
            public void onProgressChanged(SeekBar arg0, int arg1, boolean arg2) {

                int value = (int)(arg1*255.0/100);
                int V=-1;
                try {
                    V=android.provider.Settings.System.getInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS);
                } catch (SettingNotFoundException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                System.out.println("V="+V+"brightness="+value);
                //android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC);
                android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, value);
                android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
//              Intent intent= new Intent(getContext(), Bright.class);
//              Bundle b=new Bundle();
//              b.putFloat("lvl", (float)(arg1*0.01));
//              intent.putExtras(b);
//              //intent.putExtra("lvl", (float)(arg1*0.01));
//              intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//              getContext().startActivity(intent);
            }
        });

如果您关闭再打开屏幕,这将有效,但其他情况下则无效。由于该类是一个服务(没有可用的 getWindow()),我还尝试了生成一个调用代码的假 Activity 的技巧(也可以在网络上找到)

WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness=0.9f;
getWindow().setAttributes(lp);

不幸的是,在我的情况下,上述解决方案似乎都不起作用。 WindowManager 似乎什么都不做。可能这是我的应用程序的实现方式(系统覆盖而不是“经典”窗口)

无论如何,当我在后台打开“设置”>“亮度”窗口时,我突然注意到滑块开始工作。这样滑块就可以通过设置两条线直接控制系统亮度

android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS, value); android.provider.Settings.System.putInt(getContext().getContentResolver(), android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE, android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);

因此,这意味着当后台发生“某些过程”时,亮度的调节非常容易(因为它应该!)。任何人都可以帮助我尝试了解如何获得相同的效果吗?我可以简单地使用命令行启动亮度窗口(如果我知道如何),但我显然想要一个更微妙的解决方案。

请告诉我你的想法。

干杯

伊曼纽尔

【问题讨论】:

    标签: android brightness


    【解决方案1】:

    使用这个,它应该可以工作:

    final WindowManager.LayoutParams window_params=getWindow().getAttributes();
    window_params.screenBrightness=1f;
    getWindow().setAttributes(window_params);
    

    screenBrightness 介于 0.0f 和 1.0f 之间。

    //抱歉,我注意到您已经尝试过此代码。我没有使用过覆盖应用程序,因此无法帮助您。

    【讨论】:

    • 它工作!它在我在“WindowManager.LayoutParams”之前添加“final”之后开始工作,但后来我再次将其取下,它仍然有效。我重新启动,现在它可以在有或没有“最终”的情况下工作。这只是巧合还是“决赛”真的有所作为?无论如何都非常感谢!
    • (你对 10f 的看法是对的,我把它留在那里是错误的,但我确实使用了 0 到 1 之间的值。我现在更新了代码。干杯!
    猜你喜欢
    • 2015-02-19
    • 1970-01-01
    • 2016-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-15
    • 1970-01-01
    相关资源
    最近更新 更多