安卓11双屏双背光修改方法

这篇具有很好参考价值的文章主要介绍了安卓11双屏双背光修改方法。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

安卓11上调双屏异显功能,系统驱动默认支持双背光功能,老一点的系统不支持双背光驱动,所以老版本的双屏异显都是同时控制2个屏的背光,客户也没做特别要求,新版本客户有这个需求了,所以就想办法去实现;底层已经出现了2个背光节点,但是上层就没有做这个功能,硬件上2个背光也是分开的,默认双屏点亮后系统只能调默认原生的那个背光,自己修改节点的背光要想办法去实现,不说了,直接上货:
1.从系统状态栏滑竿调整背光的代码开始追起,

  frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
  public void onChanged(ToggleSlider toggleSlider, boolean tracking, boolean automatic,
            int value, boolean stopTracking) ->
          final float valFloat = convertGammaToLinearFloat(value,
                minBacklight, maxBacklight);
        if (stopTracking) {
            // TODO(brightnessfloat): change to use float value instead.
            MetricsLogger.action(mContext, metric,
                    BrightnessSynchronizer.brightnessFloatToInt(mContext, valFloat));

        }
       setBrightness(valFloat);
    private void setBrightness(float brightness) {
        mDisplayManager.setTemporaryBrightness(brightness);
    }
->
frameworks/base/core/java/android/hardware/display/DisplayManager.java
    public void setTemporaryBrightness(float brightness) {
        mGlobal.setTemporaryBrightness(brightness);
    }
->   
frameworks/base/core/java/android/hardware/display/DisplayManagerGlobal.java
    public void setTemporaryBrightness(float brightness) {
        try {
            mDm.setTemporaryBrightness(brightness);
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
    }

2.中间代码有兴趣的自己追,我不追了,最终会调用到hal层里面,修改补丁如下:

Index: hardware/rockchip/light_aidl/Android.bp
===================================================================
--- hardware/rockchip/light_aidl/Android.bp	(revision 844)
+++ hardware/rockchip/light_aidl/Android.bp	(working copy)
@@ -7,6 +7,7 @@
     shared_libs: [
         "libbase",
         "liblog",
+        "libcutils",   //加这个是为了在cpp文件调用property接口
         "libbinder_ndk",
         "android.hardware.light-ndk_platform",
     ],
Index: hardware/rockchip/light_aidl/Lights.cpp
===================================================================
--- hardware/rockchip/light_aidl/Lights.cpp	(revision 844)
+++ hardware/rockchip/light_aidl/Lights.cpp	(working copy)
@@ -23,6 +23,7 @@
 
 #include <aidl/android/hardware/light/LightType.h>
 #include <aidl/android/hardware/light/FlashMode.h>
+#include <cutils/properties.h>
 
 using namespace std;
 
@@ -54,9 +55,19 @@
 }
 
 const char* getDriverPath(LightType type) {
+
+
     switch (type) {
         case LightType::BACKLIGHT:
-            return "/sys/class/backlight/backlight/brightness";
+			char value[PROPERTY_VALUE_MAX];
+			property_get("persist.sys.backlight", value, "");
+
+			if(!strcmp(value,"1")){
+		          return "/sys/class/backlight/backlight1/brightness";
+			}
+			else{
+				  return "/sys/class/backlight/backlight/brightness";
+			}
         case LightType::BUTTONS:
             return "/sys/class/leds/button-backlight/brightness";
         case LightType::BATTERY:

仅仅按上面改还有个问题,就是背光设置完再切换另一个背光亮度的控制条时候,进度条显示的时钟是上一次进度条设置的值,就是亮度进度条没有反应正确的亮度值,要完美适配各自的亮度进度条指示,修改如下:文章来源地址https://www.toymoban.com/news/detail-756479.html

Index: frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java
===================================================================
--- frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java	(revision 855)
+++ frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java	(working copy)
@@ -47,6 +47,8 @@
 import com.android.settingslib.RestrictedLockUtilsInternal;
 import com.android.systemui.Dependency;
 import com.android.systemui.broadcast.BroadcastDispatcher;
+import android.os.SystemProperties;
+import android.os.yx.YxDeviceManager;
 
 import java.util.ArrayList;
 
@@ -82,6 +84,7 @@
     private final DisplayManager mDisplayManager;
     private final CurrentUserTracker mUserTracker;
     private final IVrManager mVrManager;
+	private YxDeviceManager yx;
 
     private final Handler mBackgroundHandler;
     private final BrightnessObserver mBrightnessObserver;
@@ -96,6 +99,7 @@
     private boolean mControlValueInitialized;
 
     private ValueAnimator mSliderAnimator;
+	private int readBrightness= 0;
 
     public interface BrightnessStateChangeCallback {
         public void onBrightnessLevelChanged();
@@ -116,7 +120,7 @@
         @Override
         public void onChange(boolean selfChange, Uri uri) {
             if (selfChange) return;
-
+            Log.i("fan","onBrightnessLevel Changed");
             if (BRIGHTNESS_MODE_URI.equals(uri)) {
                 mBackgroundHandler.post(mUpdateModeRunnable);
                 mBackgroundHandler.post(mUpdateSliderRunnable);
@@ -238,6 +242,16 @@
         public void run() {
             final float valFloat;
             final boolean inVrMode = mIsVrModeEnabled;
+			int mbacklight = SystemProperties.getInt("persist.sys.backlight",0);
+
+		/*	if(mbacklight==1){
+				Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, yx.getSystemBrightnessExtend());
+			    Log.i("fan","backlight-1 brightness="+yx.getSystemBrightnessExtend());
+			}
+			else{
+				Log.i("fan","backlight brightness="+yx.getSystemBrightness());
+				Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, yx.getSystemBrightness());
+			}*/
             if (inVrMode) {
                 valFloat = Settings.System.getFloatForUser(mContext.getContentResolver(),
                         Settings.System.SCREEN_BRIGHTNESS_FOR_VR_FLOAT, mDefaultBacklightForVr,
@@ -297,10 +311,12 @@
         mContext = context;
         mControl = control;
         mControl.setMax(GAMMA_SPACE_MAX);
+		yx = YxDeviceManager.getInstance(context);
         mBackgroundHandler = new Handler((Looper) Dependency.get(Dependency.BG_LOOPER));
         mUserTracker = new CurrentUserTracker(broadcastDispatcher) {
             @Override
-            public void onUserSwitched(int newUserId) {
+            public void onUserSwitched(int newUserId) {
+               Log.i("fan","onUserSwitched");
                 mBackgroundHandler.post(mUpdateModeRunnable);
                 mBackgroundHandler.post(mUpdateSliderRunnable);
             }
@@ -356,7 +372,7 @@
     public void onChanged(ToggleSlider toggleSlider, boolean tracking, boolean automatic,
             int value, boolean stopTracking) {
         if (mExternalChange) return;
-
+        Log.i("fan","ToggleSlider  onChanged");
         if (mSliderAnimator != null) {
             mSliderAnimator.cancel();
         }
@@ -434,7 +450,8 @@
 
     private void updateSlider(float brightnessValue, boolean inVrMode) {
         final float min;
-        final float max;
+        final float max;
+		float result;
         if (inVrMode) {
             min = mMinimumBacklightForVr;
             max = mMaximumBacklightForVr;
@@ -450,14 +467,31 @@
             return;
         }
         // Returns GAMMA_SPACE_MIN - GAMMA_SPACE_MAX
-        final int sliderVal = convertLinearToGammaFloat(brightnessValue, min, max);
-        animateSliderTo(sliderVal);
+        //Log.i("fan","read brightnessValue="+brightnessValue+"min="+min+"max="+max);
+		int mbacklight = SystemProperties.getInt("persist.sys.backlight",0);
+		if(mbacklight==1){
+		    readBrightness= yx.getSystemBrightnessExtend();
+		    //Log.i("fan","backlight-1 brightness="+readBrightness);
+		}
+		else{
+			readBrightness= yx.getSystemBrightness();
+			//Log.i("fan","backlight brightness="+readBrightness);
+		}
+		 result = (float)(readBrightness/255.0000f);
+		//Log.i("fan","send brightnessValue="+brightnessValue);
+		//brightnessValue = result;
+		//Log.i("fan","read brightnessValue="+result);
+		final int sliderVal = convertLinearToGammaFloat(result, min, max);
+
+		//Log.i("fan","read sliderVal="+sliderVal);
+
+		animateSliderTo(sliderVal);
     }
 
     private void animateSliderTo(int target) {
         if (!mControlValueInitialized) {
             // Don't animate the first value since its default state isn't meaningful to users.
-            mControl.setValue(target);
+			mControl.setValue(target);
             mControlValueInitialized = true;
         }
         if (mSliderAnimator != null && mSliderAnimator.isStarted()) {

到了这里,关于安卓11双屏双背光修改方法的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 安卓学习笔记:安卓11访问/读写 Android/data 目录

    省流提示:采用android studio工具开发,记录一次低级的开发,避免以后忘记或者踩坑。 最近有个业余项目开发到一小半,过程中需要读写 Android/data目录的文件,采用常规的文件操作总是提示权限被拒绝,无奈上网参考了很多资料,终于得到了解决。 无法访问Android/data 的原因

    2024年02月13日
    浏览(34)
  • 安卓apk修改(Android反编译apk)

    最近因为项目需要,需要将Android手机系统自带的某个系统软件反编译并更改里面某个资源,并重新打包,签名生成新的自定义的apk,下面我来介绍一下我的实现过程。APK修改,分为以下几步: 反编译解包,修改, 重打包 , 修改签名等步骤。 1. 系统配置好Java JDK环境变量 2. 需要

    2024年02月01日
    浏览(35)
  • Windows11安装安卓/Android子系统运行安卓应用程序详细教程

    开启电脑的虚拟化支持,在控制面板-程序和功能-启用和关闭windows功能。选择 Hyper-V 和 虚拟机平台 ,然后重启电脑即可。 访问 https://store.rg-adguard.net/ 搜索 https://www.microsoft.com/store/productId/9P3395VX91NR 下载最大的一个文件,即安卓子系统文件 下载地址: http://tlu.dl.delivery.mp.mi

    2024年02月03日
    浏览(46)
  • 五分钟Win11安装安卓(Android)子系统

    十分钟,完成win11安装安卓子系统 Win+i 进入设置页面,选择 时间和语言 - 语言和区域 - 区域-美国 访问如下连接,install即可 安卓子系统 在开始菜单找到子系统,点开,做如下配置: 打开应用商店,安卓APK安装程序 下载应用宝手机版,APK文件,双击,有什么点什么,即可

    2024年02月02日
    浏览(45)
  • Android11.0 launcher修改为单层

    OS: RK3568 Android11.0 现在的产品基本都是按照手机样式去做,所以需要把系统默认的Launcher样式,去掉抽屉改为单层显示,也就是把所有的app添加到workspace中。 以下修改是在设备横屏模式下进行 。 1.添加一个宏开关控制Launcher单双层显示 源码: /packages/apps/Launcher3/src/com/android/

    2024年02月08日
    浏览(37)
  • Android11.0 修改系统默认显示大小

    系统设置中的显示大小调整的就是屏幕密度,调整的越小,屏幕显示的内容就越多。 在系统中都会有定义一个默认的屏幕密度 设置中显示大小相关内容 源码:/packages/apps/Settings/res/xml/display_settings.xml 源码:/packages/apps/Settings/src/com/android/settings/display/ScreenZoomSettings.java 密度缩

    2024年02月09日
    浏览(33)
  • Android之 双屏异显控制

    一 简介 1.1 我们用的手机基本上只有一个屏幕,那这里的双屏指的什么呢?其实现在手机都是支持双屏的,我们可以在开发者选项里面来打开这个控制,来看下什么是双屏。 可以打开设置 - 开发者选项 - 模拟辅助显示设备来开启副屏显示,还可以选择显示尺寸  1.2 不过手机

    2024年02月16日
    浏览(49)
  • 【干货】Android系统定制基础篇:第一部分(文件权限、增加信号强度、双路背光控制)

    当需要修改某文件或路径权限时,我们可以在init.rc开机启动某节点添加chmod命令进行修改。但是对于system分区,由于是ro权限,在init.rc使用chmod修改权限无效。需要在文件编译时,对权限进行修改。不同的Android版本改法一样,但是文件所在目录有差异,Android O主要修改文件是

    2024年02月09日
    浏览(39)
  • android11 如何修改状态栏的背景

    修改status_bar.xml :

    2024年04月16日
    浏览(24)
  • Android文件选择器 路径选择 支持安卓4.4 ~ 13 支持Android/data目录访问 支持SD卡 适配Android11

    Android上进行文件选择或操作的第三方库,自动申请存储权限,支持 Android4.4 ~ 13,再也不用为了适配各种版本而苦恼了,快速集成,一句代码搞定,完善的文档,支持无root权限访问和操作Android/data和Android/obb目录(适配Android 13),支持SD卡,高度自定义UI满足你的所有需求,使用非常

    2024年02月04日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包