Flutter第三方插件screen_brightness在安卓上关闭自动调节亮度失效如何解决

我在Flutter项目中使用screen_brightness插件时遇到问题:在安卓设备上调用setAutoBrightness(false)无法关闭自动亮度调节功能,但iOS端正常。已尝试过以下方法:

  1. 确保WRITE_SETTINGS权限已动态申请并在Manifest声明
  2. 测试不同安卓版本(10/11/12)均有此问题
  3. 调用getAutoBrightness返回的确实是false 但屏幕亮度仍会随环境光自动变化,请问该如何解决?是否需要在原生层额外配置?
2 回复

检查插件版本,确保使用最新版。确认应用已获取WRITE_SETTINGS权限。部分安卓系统需手动关闭“自适应亮度”设置。可尝试重启应用或设备。

更多关于Flutter第三方插件screen_brightness在安卓上关闭自动调节亮度失效如何解决的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中使用screen_brightness插件关闭自动调节亮度失效,通常是因为Android系统的限制或配置问题。以下是解决方案:

1. 检查权限

确保在android/app/src/main/AndroidManifest.xml中添加以下权限:

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

2. 手动授予系统设置权限

  • 在Android 6.0+设备上,WRITE_SETTINGS权限需要用户手动授权。
  • 引导用户到系统设置中开启“修改系统设置”权限:
    • 代码检查并跳转:
import 'package:screen_brightness/screen_brightness.dart';
import 'package:flutter/services.dart';

Future<void> disableAutoBrightness() async {
  try {
    await ScreenBrightness().setAutoBrightness(enabled: false);
  } on PlatformException catch (e) {
    if (e.code == 'PERMISSION_DENIED') {
      // 引导用户手动开启权限
      await ScreenBrightness().requestPermissions();
    }
  }
}

3. 使用Android原生代码(备用方案)

如果插件仍失效,通过MethodChannel调用原生代码:

  1. Flutter端
static const platform = MethodChannel('your_channel_name');
Future<void> disableAutoBrightnessNative() async {
  try {
    await platform.invokeMethod('disableAutoBrightness');
  } on PlatformException catch (e) {
    print("Failed: '${e.message}'");
  }
}
  1. Android端(MainActivity.kt):
class MainActivity : FlutterActivity() {
  private val CHANNEL = "your_channel_name"

  override fun configureFlutterEngine(flutterEngine: FlutterEngine) {
    super.configureFlutterEngine(flutterEngine)
    MethodChannel(flutterEngine.dartExecutor.binaryMessenger, CHANNEL).setMethodCallHandler { call, result ->
      if (call.method == "disableAutoBrightness") {
        disableAutoBrightness()
        result.success(null)
      } else {
        result.notImplemented()
      }
    }
  }

  private fun disableAutoBrightness() {
    if (Settings.System.canWrite(this)) {
      Settings.System.putInt(contentResolver, Settings.System.SCREEN_BRIGHTNESS_MODE, 
                             Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL)
    } else {
      // 引导用户开启权限
      val intent = Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS)
      intent.data = Uri.parse("package:$packageName")
      startActivity(intent)
    }
  }
}

4. 注意事项

  • 系统兼容性:部分厂商定制系统(如小米、华为)可能限制此功能,需额外适配。
  • 测试时使用真机,模拟器可能不支持亮度调节。

通过以上步骤,应能解决大部分自动调节亮度关闭失效的问题。

回到顶部