Android14 mtk平台实现拔插充电器亮度改变

客户要实现一个功能 拔出充电器的时候亮度降到最低 插入充电器亮度调到最高 一开始就想着用广播去接收拔插充电器的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修改系统亮度的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值