客户要实现一个功能 拔出充电器的时候亮度降到最低 插入充电器亮度调到最高 一开始就想着用广播去接收拔插充电器的action 前辈告诉我在SystemUI里面有相关的方法 照搬就行 路径如下:
alps\vendor\mediatek\proprietary\packages\apps\SystemUI\src\com\android\systemui\power\PowerUI.java
在这个java文件中有一个广播 在OnReceive方法里有对于充电状态的改变action的接受和是否插入和拔出的布尔类型的变量的判断
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (PowerManager.ACTION_POWER_SAVE_MODE_CHANGED.equals(action)) {
ThreadUtils.postOnBackgroundThread(() -> {
if (mPowerManager.isPowerSaveMode()) {
mWarnings.dismissLowBatteryWarning();
}
});
} else if (Intent.ACTION_BATTERY_CHANGED.equals(action)) {//action判断
mHasReceivedBattery = true;
final int oldBatteryLevel = mBatteryLevel;
mBatteryLevel = intent.getIntExtra(BatteryManager.EXTRA_LEVEL, 100);
final int oldBatteryStatus = mBatteryStatus;
mBatteryStatus = intent.getIntExtra(BatteryManager.EXTRA_STATUS,
BatteryManager.BATTERY_STATUS_UNKNOWN);
final int oldPlugType = mPlugType;
mPlugType = intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, 1);
final int oldInvalidCharger = mInvalidCharger;
mInvalidCharger = intent.getIntExtra(BatteryManager.EXTRA_INVALID_CHARGER, 0);
mLastBatteryStateSnapshot = mCurrentBatteryStateSnapshot;
final boolean plugged = mPlugType != 0;//当前是否插入
final boolean oldPlugged = oldPlugType != 0;//之前是否拔出
我们可以围绕这两个变量做文章:
当插入的时候 此时plugged为true oldPlugged为false
当拔出的时候 此时plugged为false oldPlugged为true 分析过后就可以开始操作了:
diff --git a/src/com/android/systemui/power/PowerUI.java b/src/com/android/systemui/power/PowerUI.java
old mode 100644
new mode 100755
index 4b73dc62d..32949cad4
--- a/src/com/android/systemui/power/PowerUI.java
+++ b/src/com/android/systemui/power/PowerUI.java
@@ -63,10 +63,16 @@ import javax.inject.Inject;
import dagger.Lazy;
import com.mediatek.provider.MtkSettingsExt;
+import android.hardware.display.DisplayManager;
+import android.os.AsyncTask;
@SysUISingleton
public class PowerUI implements CoreStartable, CommandQueue.Callbacks {
static final String TAG = "PowerUI";
+ private final int mDisplayId;
+ private final DisplayManager mDisplayManager;
+
static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
private static final long TEMPERATURE_INTERVAL = 30 * DateUtils.SECOND_IN_MILLIS;
private static final long TEMPERATURE_LOGGING_INTERVAL = DateUtils.HOUR_IN_MILLIS;
private static final long TEMPERATURE_LOGGING_INTERVAL = DateUtils.HOUR_IN_MILLIS;
@@ -154,6 +160,8 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks {
mPowerManager = powerManager;
mWakefulnessLifecycle = wakefulnessLifecycle;
mUserTracker = userTracker;
+ mDisplayManager = context.getSystemService(DisplayManager.class);
+ mDisplayId = context.getDisplayId();
}
public void start() {
@@ -319,7 +327,18 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks {
final boolean plugged = mPlugType != 0;
final boolean oldPlugged = oldPlugType != 0;
}
public void start() {
@@ -319,7 +327,18 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks {
final boolean plugged = mPlugType != 0;
final boolean oldPlugged = oldPlugType != 0;
-
+ if(plugged==false&&oldPlugged==true){//拔出
+ android.util.Log.d("wfs222", "DisConnect");
+ saveScreenBrightness(0.0F);//设置系统亮度最低
+ }
+
+ if(plugged==true&&oldPlugged==false){//插入
+ android.util.Log.d("wfs222", "Connect");
+ saveScreenBrightness(1.0F);//设置系统亮度最高
+ }
+
+
int oldBucket = findBatteryLevelBucket(oldBatteryLevel);
int bucket = findBatteryLevelBucket(mBatteryLevel);
@@ -367,6 +386,22 @@ public class PowerUI implements CoreStartable, CommandQueue.Callbacks {
}
}
}
+
+ //设置系统亮度的方法 从SystemUI扒下来的
+ private void saveScreenBrightness(float valFloat){
+ try{
+ mDisplayManager.setTemporaryBrightness(mDisplayId, valFloat);
+ AsyncTask.execute(new Runnable() {
+ public void run() {
+ mDisplayManager.setBrightness(mDisplayId, valFloat);
+ }
+ });
+ }
+ catch (Exception localException){
+ localException.printStackTrace();
+ }
+ }
+
小插曲:一开始设置系统亮度用的ContentResolver 结果发现改不动系统亮度 后面在SystemUI中找到了用DisplayManager修改系统亮度的方法。