手动更改屏幕亮度后,无法通过应用程序代码更改亮度

问题描述 投票:0回答:1

我正在使用 React Native 和

@adrianso/react-native-device-brightness
库来实现此目的 想象一下我在屏幕 A 中,设备亮度约为 0.5 当重定向到屏幕 B 时,保存当前亮度,然后我将亮度设置为 1(最大值)。如果我返回屏幕 A,亮度将设置回保存的值 (0.5) 这将正常工作,直到:

  • 在屏幕A中,我向下滑动并手动调整屏幕亮度
  • 重定向到屏幕 B
  • 反之亦然

会发生以下情况之一:

  • B屏亮度设置为1,回到A屏还是1,没有重置为0.5
  • B 屏亮度仍为 0.5,未按预期设置为最大
  • 亮度如上述正常工作

我已经尝试过:

  • 更换库:其他库也有同样的问题。没试过
    expo-brightness
  • 调试+日志记录:Try catch不会返回任何错误,保存的亮度值和设置的新值都是正确的,只是屏幕亮度没有跟随设置值变化。

请问这个问题与iOS的线程阻塞有关吗?

reactjs react-native react-native-navigation screen-brightness
1个回答
0
投票
const [previousBrightness, setPreviousBrightness] = useState<number | null>(null);

const getBrightness = () => {
    Brightness.getBrightnessAsync().then((value) => {
      setPreviousBrightness(value);
    });
};

 const restoreBrightness = useCallback(() => {
    if (previousBrightness !== null) {
      Brightness.setBrightnessAsync(previousBrightness)
        .then(() => {
          console.info('Brightness restored');
        })
        .catch(() => {
          console.error('Error restoring brightness');
        });
    }
  }, [previousBrightness]);




useEffect(() => {
(async () => {
  getBrightness();

  const { status } = await Brightness.requestPermissionsAsync();
  if (status === 'granted') {
    Brightness.setBrightnessAsync(1)
      .then(() => {
        console.info('Brightness set to 1');
      })
      .catch(() => {
        console.error('Error setting brightness');
      });
  }
})();
return restoreBrightness;
 },[restoreBrightness]);
  1. 存储负载时的亮度
  2. 恢复卸载时的原始亮度
© www.soinside.com 2019 - 2024. All rights reserved.