【问题标题】:Update Display Brightness on Android after changing it programmatically以编程方式更改后更新 Android 上的显示亮度
【发布时间】:2010-12-06 12:12:50
【问题描述】:

我正在尝试从小部件更新显示亮度,但我遇到了一些问题。

要更改亮度级别,我使用:

Settings.System.putInt(context.getContentResolver(),android.provider.Settings.System.SCREEN_BRIGHTNESS, 200);

这会修改显示设置(实际上在Display->Brightness中级别是正确的)但显示的有效亮度没有改变。如果我锁定屏幕并解锁,亮度最终会变为我设置的值。

我认为这是设置更新问题,那么如何在设置更改后立即更新显示设置?

我读到应该使用WindowManager.LayoutParams lp = getWindow().getAttributes();,但我正在使用 App Widget,因此无法调用 getWindow()。

【问题讨论】:

    标签: android screen-brightness


    【解决方案1】:

    我遇到了类似的问题,只是创建了一个没有 UI 的 Activity 来进行亮度更改,使用 Intent 从 App Widget 运行它。

    【讨论】:

    • 好主意!您创建了一个新类 Activity 或将其绑定在小部件内?
    • 既然你解决了这个问题,你能写一些代码解释清楚吗?谢谢 GeekYouUp!
    • 我试图创建一个活动,但亮度的变化只应用于活动...
    • 嗨。我们之间一定有一些时差,但我现在回来了。我的亮度设置项目是开源的,代码在autobright.googlecode.com 如果我想在整个系统中显示亮度,我总是需要等待 500 毫秒才能完成 Activity。
    • 谢谢!我会试着用这种方式解决这个问题,我会告诉你的!
    【解决方案2】:

    首先,LayoutParams 中要修改的值为screenBrightness。然后你必须做一个window.setAttributes 来应用它。正如GeekYouUp 所说,您可以创建一个虚拟活动来获取您的 Window 对象。

    【讨论】:

    • 如何创建虚拟活动??
    • 正如他所说,您创建了一个活动,只是与任何 UI 相关联
    【解决方案3】:

    你能在你的 RemoteView 中使用这段代码吗,

    Settings.System.putInt(context.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, brightness);
    
    // This makes the new screen brightness effective
    WindowManager.LayoutParams layoutParams = ((Activity)context).getWindow().getAttributes();
    float b = brightness/255.0f;
    if(b == 0.0)    
        b = 0.01f;
    layoutParams.screenBrightness = b;
    ((Activity)context).getWindow().setAttributes(layoutParams);
    

    当您从不扩展 Activity 但您只需要上下文的用户定义类中设置手机屏幕亮度时,此代码可以正常工作。 p>

    【讨论】:

      猜你喜欢
      • 2011-03-15
      • 1970-01-01
      • 1970-01-01
      • 2011-04-13
      • 2010-09-26
      • 2013-08-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多