Skip to content

Commit aa181ff

Browse files
author
lihuanke
committed
fix: Android max brightness issue
1 parent d895a06 commit aa181ff

File tree

1 file changed

+35
-1
lines changed

1 file changed

+35
-1
lines changed

android/src/main/java/org/capslock/RNDeviceBrightness/RNDeviceBrightnessModule.java

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33
*/
44

55
package org.capslock.RNDeviceBrightness;
6-
76
import android.app.Activity;
7+
import android.content.Context;
8+
import android.os.PowerManager;
9+
import android.util.Log;
810
import android.view.WindowManager;
911
import android.provider.Settings;
1012

@@ -15,6 +17,9 @@
1517
import com.facebook.react.bridge.ReactMethod;
1618
import com.facebook.react.bridge.Promise;
1719
import android.content.res.Resources;
20+
21+
import java.lang.reflect.Field;
22+
1823
public class RNDeviceBrightnessModule extends ReactContextBaseJavaModule {
1924
private static final int BRIGHTNESS_MAX = 255;
2025
private static final int BRIGHTNESS_MIN = 0;
@@ -57,6 +62,10 @@ public void getBrightnessLevel(Promise promise) {
5762
*/
5863
private int getBrightnessMax() {
5964
try {
65+
int maxBri = getMaxBrightness(getReactApplicationContext(), BRIGHTNESS_MAX);
66+
if (maxBri != 0) {
67+
return maxBri;
68+
}
6069
Resources system = Resources.getSystem();
6170
int resId = system.getIdentifier("config_screenBrightnessSettingMaximum", "integer", "android"); // API17+
6271
if (resId != 0) {
@@ -67,6 +76,31 @@ private int getBrightnessMax() {
6776
}
6877
return BRIGHTNESS_MAX;
6978
}
79+
80+
/**
81+
* 获取最大亮度(通过PowerManager的方式)
82+
* @param context
83+
* @param defaultValue
84+
* @return [int]max brightness
85+
*/
86+
private int getMaxBrightness(Context context, int defaultValue){
87+
PowerManager powerManager = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
88+
if(powerManager != null) {
89+
Field[] fields = powerManager.getClass().getDeclaredFields();
90+
for (Field field: fields) {
91+
// https://android.googlesource.com/platform/frameworks/base/+/refs/heads/master/core/java/android/os/PowerManager.java
92+
if(field.getName().equals("BRIGHTNESS_ON")) {
93+
field.setAccessible(true);
94+
try {
95+
return (int) field.get(powerManager);
96+
} catch (IllegalAccessException e) {
97+
return defaultValue;
98+
}
99+
}
100+
}
101+
}
102+
return defaultValue;
103+
}
70104

71105
@ReactMethod
72106
public void getSystemBrightnessLevel(Promise promise){

0 commit comments

Comments
 (0)