【问题标题】:how to set screen brightness?如何设置屏幕亮度?
【发布时间】:2014-04-26 20:40:17
【问题描述】:

我想通过一个按钮来调整屏幕亮度,所以当背景是白色的时候屏幕亮度应该是最大的,同时如果背景是黑色的屏幕亮度应该是最小的,但是我得到了一个错误:NullPointerException.. . 这是我的代码:

public void lamp2(boolean mode){

        if(mode){

            r.setBackgroundColor(Color.WHITE);
            btn.setText("Turn OFF");
            btn.setTextColor(Color.RED);
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.screenBrightness = 90 / 100.0f;
            getWindow().setAttributes(lp);
            this.mode = true;
        }

        else if(!mode){

            r.setBackgroundColor(Color.BLACK);
            btn.setText("Turn ON");
            btn.setTextColor(Color.GREEN);
            WindowManager.LayoutParams lp = getWindow().getAttributes();
            lp.screenBrightness = 100 / 100.0f;
            getWindow().setAttributes(lp);
            this.mode = false;
        }
    }

【问题讨论】:

  • 你从哪里得到 NullPointerException
  • @MatejSpili 我解决了这个问题,但是我怎样才能获得最大亮度和最小亮度?

标签: android screen brightness


【解决方案1】:

把这些线放在最大

WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 1.0f;
getWindow().setAttributes(params);

把这些线放在最小

WindowManager.LayoutParams params = getWindow().getAttributes();
params.screenBrightness = 0.1f;
getWindow().setAttributes(params);

【讨论】:

【解决方案2】:

如果您想管理活动的亮度,您必须在 onResume(或 onCreate)方法中使用以下代码:

此代码在调用时会更改屏幕的亮度,但不会更改系统的亮度参数(这是很好的做法)。当您的活动被破坏(完成)时,亮度将恢复正常。离开您的应用程序时,无需在您的清单中请求许可,也无需设置亮度值。简而言之,您在管理屏幕亮度时使用此代码。

 override fun onCreate(savedInstanceState: Bundle?) {
        handleScreenBrightness()
        super.onCreate(savedInstanceState)


    }


    private fun handleScreenBrightness() {
        val params = window.attributes
        params.screenBrightness = 1.0f// 0.0 - 1.0
        window.attributes = params
        window.addFlags(WindowManager.LayoutParams.FLAGS_CHANGED)
    }

【讨论】:

    【解决方案3】:

    在 Android Manifest 中添加 Bright 设置权限

      <uses-permission android:name="android.permission.WRITE_SETTINGS"
            tools:ignore="ProtectedPermissions"/>
    

    写入设置是受保护的设置,因此请用户允许写入系统设置:

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                if (Settings.System.canWrite(this)) {
                    Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
                    intent.setData(Uri.parse("package:" + getPackageName()));
                    startActivity(intent);
                }
            }
    

    现在您可以轻松设置亮度

                ContentResolver cResolver = getContentResolver();
                Settings.System.putInt(cResolver, Settings.System.SCREEN_BRIGHTNESS, 2);
    

    【讨论】:

      【解决方案4】:

      科特林:

          val lp = window.attributes
          lp.screenBrightness = 0.6F
          window.attributes = lp
      

      所有有权限的代码:

      
          private fun changeSystemBrightness(brightness: Float) {
              if (hasPermissionsToWriteSettings(this)) {
                  val lp = window.attributes
                  lp.screenBrightness = brightness
                  window.attributes = lp
              } else {
                  println("not allow permissions")
              }
          }
      
          private fun hasPermissionsToWriteSettings(context: Activity): Boolean {
              return if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                  Settings.System.canWrite(context)
              } else {
                  ContextCompat.checkSelfPermission(context, Manifest.permission.WRITE_SETTINGS) == PackageManager.PERMISSION_GRANTED
              }
          }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-10-08
        • 2012-08-28
        相关资源
        最近更新 更多