多屏显示成主流
车机屏、电视屏、折叠屏
DisplayManagerService
显示屏 Display 获取方法
通过 DisplayService 系统 service 获取 DisplayManager 然后 getDisplays() 获取到所有显示设备
// 注册屏幕变化监听器
public void registerDisplayListener(){
DisplayManager displayManager = (DisplayManager) mContext.getSystemService(Context.DISPLAY_SERVICE);
displayManager.registerDisplayListener(new DisplayManager.DisplayListener() {
@Override
public void onDisplayAdded(int displayId) {
}
@Override
public void onDisplayRemoved(int displayId) {
}
@Override
public void onDisplayChanged(int displayId) {
}
}, dealingHandler);
}
// 获取当前刷新率
public double getRefreshRate() {
return ((WindowManager) mContext
.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay()
.getRefreshRate();
}
方法一通过 displayManager.getDisplays(DISPLAY_CATEGORY_PRESENTATION) 过滤
val displayManager = application.getSystemService(Context.DISPLAY_SERVICE) as DisplayManager
val builder = StringBuilder()
val displays = displayManager.getDisplays(DISPLAY_CATEGORY_PRESENTATION)
val displayDefault = displayManager.getDisplay(Display.DEFAULT_DISPLAY)
println("displayDefault $displayDefault")
println("displayDefault.mode ${displayDefault.mode}")
if (displays != null && displays.isNotEmpty()) {
for (display in displays) {
// 这不是默认显示器,可能是一个通过HDMI连接的外部显示器
println("display $display \n ${display.mode}")
println("display.state ${display.state}")
builder.append("$display\n ${display.mode}")
}
} else {
builder.append("$displayDefault\n ${displayDefault.mode}")
}
这个方法在一加 ace3 Pro 上判断错误
日志:
Display id 10004: DisplayInfo{"Mirage_keepalive_display_004", displayId 10004, displayGroupId 0, FLAG_SECURE, FLAG_PRESENTATION, FLAG_TRUSTED, real 2376 x 1080, largest app 2376 x 2376, smallest app 1080 x 1080, appVsyncOff 0, presDeadline 0, mode 80.0, defaultMode 8, modes [{id=8, width=1080, height=2376, fps=120.00001, alternativeRefreshRates=[], supportedHdrTypes=[]}], hdrCapabilities null, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 1, state ON, committedState UNKNOWN}, DisplayMetrics{density=3.0, width=2376, height=1080, scaledDensity=3.0, xdpi=452.0, ydpi=449.0}, isValid=true
{id=8, width=1080, height=2376, fps=120.00001, alternativeRefreshRates=[], supportedHdrTypes=[]}
方法二 通过 display.getFlags() & Display.FLAG_PRESENTATION 过滤
第一个方法在一加 ace3 Pro 上判断错误
DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE);
Display[] displays = displayManager.getDisplays();
if (displays != null) {
for (Display display : displays) {
if (display.getDisplayId() != Display.DEFAULT_DISPLAY
&& display.getDisplayId() != Display.INVALID_DISPLAY
&& (display.getFlags() & Display.FLAG_PRESENTATION) ==
Display.FLAG_PRESENTATION
&& display.getState() == Display.STATE_ON) {
}
}
}
- Presentation 演示屏
Display id 5: DisplayInfo{"华为智慧屏 SE55", displayId 5", displayGroupId 0, FLAG_PRESENTATION, FLAG_TRUSTED, real 1920 x 1080, largest app 1920 x 1920, smallest app 1080 x 1080, appVsyncOff 0, presDeadline 16666666, mode 4, defaultMode 4, modes [{id=4, width=1920, height=1080, fps=60.0, alternativeRefreshRates=[]}], hdrCapabilities null, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state ON}, DisplayMetrics{density=1.0, width=1920, height=1080, scaledDensity=1.0, xdpi=160.0, ydpi=160.0, densityDpi=160, noncompatWidthPixels=1920, noncompatHeightPixels=1080, noncompatDensity=1.0, noncompatDensityDpi=160, noncompatXdpi=160.0, noncompatYdpi=160.0}, isValid=true
- displayDefault 内置屏
Display id 0: DisplayInfo{"内置屏幕", displayId 0", displayGroupId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 2340 x 1080, largest app 2235 x 2235, smallest app 1080 x 975, appVsyncOff 2000000, presDeadline 15666666, mode 1, defaultMode 1, modes [{id=1, width=1080, height=2340, fps=60.000004, alternativeRefreshRates=[]}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[2, 3], mMaxLuminance=500.0, mMaxAverageLuminance=102.0, mMinLuminance=1.0}, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 1, state ON}, DisplayMetrics{density=3.0, width=2235, height=1080, scaledDensity=3.0, xdpi=391.885, ydpi=391.026, densityDpi=480, noncompatWidthPixels=2235, noncompatHeightPixels=1080, noncompatDensity=3.0, noncompatDensityDpi=480, noncompatXdpi=391.885, noncompatYdpi=391.026}, isValid=true
Display 属性分析
- displayId:显示设备的标识符,用于区分不同的显示设备 。
- uniqueId:在 Android 10 中更新,提供了一个稳定的标识符,用于区分本地、网络和虚拟屏幕。格式可能为
local:<stable-id>、network:<mac-address>或virtual:<package-name-and-name>。 - name:显示设备的名称,提供人类可读的描述 。
- flags:描述显示功能的一系列标志,如
FLAG_SECURE表示显示器具有安全视频输出 ,FLAG_PRESENTATION表示演示和展示。 - width 和 height:显示设备的宽度和高度,单位为像素 。
- refreshRate:显示设备的刷新率,单位为赫兹 。
- density:显示设备的逻辑密度,影响布局和图像的缩放 。
- xdpi 和 ydpi:显示设备的 X 轴和 Y 轴方向每英寸的确切物理像素数 。
- rotation:屏幕的旋转角度,从自然方向开始计算 。
- state:显示设备的状态,如
STATE_ON表示显示器打开 。 - modeId:显示设备的模式 ID,用于标识当前显示模式 。
- colorMode:显示设备的色域模式,例如 sRGB、DCI-P3 等 。
- mType: TYPE_UNKNOWN, TYPE_INTERNAL, TYPE_EXTERNAL, TYPE_WIFI, TYPE_OVERLAY, TYPE_VIRTUAL
dumpsys display
HWTAS:/ $ dumpsys display
DISPLAY MANAGER (dumpsys display)
mOnlyCode=false
mSafeMode=false
mPendingTraversal=false
mViewports=[DisplayViewport{type=INTERNAL, valid=true, isActive=true, displayId=0, uniqueId='local:0', physicalPort=0, orientation=0, logicalFrame=Rect(0, 0 - 1080, 2340), physicalFrame=Rect(0, 0 - 1080, 2340), deviceWidth=1080, deviceHeight=2340}]
mDefaultDisplayDefaultColorMode=0
mWifiDisplayScanRequestCount=0
mStableDisplaySize=Point(1080, 2340)
mMinimumBrightnessCurve=[(0.0, 0.0), (2000.0, 50.0), (4000.0, 90.0)]
Display States: size=1
Display Id=0
Display State=ON
Display Brightness=0.21568628
Display SdrBrightness=0.21568628
Display Adapters: size=5
LocalDisplayAdapter
VirtualDisplayAdapter
OverlayDisplayAdapter
mCurrentOverlaySetting=
mOverlays: size=0
WifiDisplayAdapter
mCurrentStatus=WifiDisplayStatus{featureState=3, scanState=0, activeDisplayState=0, activeDisplay=null, displays=[荣耀智慧屏 (02:bb:1c:90:96:13), isAvailable false, canConnect false, isRemembered true, 华为智慧屏 SE55 畅连版 (fa:89:d2:), isAvailable false, canConnect false, isRemembered true, SPro mini65_a2ca (4e:31:2d:eb:a2:ca), isAvailable false, canConnect false, isRemembered true, A Pro 55_2eb9 (8a:12:ac:f4:2e:b9), isAvailable false, canConnect false, isRemembered true, ESPro65_68f7 (1a:ef:3a:ce:68:f7), isAvailable false, canConnect false, isRemembered true, K75C12G (4a:9e:9d:fe:21:cc), isAvailable false, canConnect false, isRemembered true, TCL 75C11G Pro-4D25 (86:c8:a0:66:fe:df), isAvailable false, canConnect false, isRemembered true, TCL 85C78H-38B3 (d2:12:55:e2:5d:dc), isAvailable false, canConnect false, isRemembered true, ES55_eef3 (62:1d:9d:de:ee:f3), isAvailable false, canConnect false, isRemembered true, 小米电视75_2945 (5e:c:99:29:45), isAvailable false, canConnect false, isRemembered true, 华为智慧屏 SE55 (7a:66:9d:0e:f6:9e), isAvailable true, canConnect true, isRemembered true], sessionInfo=WifiDisplaySessionInfo:
Client/Owner: Client
GroupId:
Passphrase:
SessionId: 0
IP Address: }
mFeatureState=3
mScanState=0
mActiveDisplayState=0
mActiveDisplay=null
mDisplays=[荣耀智慧屏 (02:bb:1c:90:96:13), isAvailable false, canConnect false, isRemembered true, 华为智慧屏 SE55 畅连版 (fa:89:d2:40:94:23), isAvailable false, canConnect false, isRemembered true, SPro mini65_a2ca (4e:31:2d:eb:a2:ca) false, canConnect false, isRemembered true, A Pro 55_2eb9 (8a:12:ac:f4:2e:b9), isAvailable false, canConnect false, isRemembered true, ESPro65_68f7 (1a:ef:3a:ce:68:f7), isAvailable false, canConnect false, isRemembered true, K75C12G (4a:9e:9d:fe:21:cc), isAvailable false, canConnect false, isRemembered true, TCL 75C11G Pro-4D25 (86:c8:a0:66:fe:df), isAvailable false, canConnect false, isRemembered true, TCL 85C78H-38B3 (d2:12:55:e2:5d:dc), isAvailable false, canConnect false, isRemembered true, ES55_eef3 (62:1d:9d:de:ee:f3), isAvailable false, canConnect false, isRemembered true, 小米电视75_2945 (5e:c3:36:99:29:45), isAvailable false, canConnect false, isRemembered true, 华为智慧屏 SE55 (7a:66:9d:0e:f6:9e),ble true, canConnect true, isRemembered true]
mAvailableDisplays=[]
mRememberedDisplays=[荣耀智慧屏 (02:bb:1c:90:96:13), isAvailable false, canConnect false, isRemembered false, 华为智慧屏 SE55 畅连版 (fa:89:d2:40:94:23), isAvailable false, canConnect false, isRemembered false, SPro mini65_a2ca (4e:31: isAvailable false, canConnect false, isRemembered false, A Pro 55_2eb9 (8a:12:ac:f4:2e:b9), isAvailable false, canConnect false, isRemembered false, ESPro65_68f7 (1a:ef:3a:ce:68:f7), isAvailable false, canConnect false, isRemembered false, K75C12G (4a:9e:9d:fe:21:cc), isAvailable false, canConnect false, isRemembered false, TCL 75C11G Pro-4D25 (86:c8:a0:66:fe:df), isAvailable false, canConnect false, isRemembered false, TCL 85C78H-38B3 (d2:12:55:e2:5d:dc), isAvailable false, canConnect false, isRemembered false, ES55_eef3 (62:1d:9d:de:ee:f3), isAvailable false, canConnect false, isRemembered false, 小米电视75_2945 (5e:c3:36:99:29:45), isAvailable false, canConnect false, isRemembered false, 华为智慧屏 SE55 :0e:f6:9e), isAvailable true, canConnect true, isRemembered false]
mPendingStatusChangeBroadcast=false
mSupportsProtectedBuffers=false
mDisplayController:
mWifiDisplayOnSetting=true
mWifiP2pEnabled=true
mWfdEnabled=true
mWfdEnabling=false
mNetworkInfo=[type: WIFI_P2P[], state: DISCONNECTED/DISCONNECTED, reason: (unspecified), extra: (none), failover: false, available: false, roaming: false]
mScanRequested=false
mDiscoverPeersInProgress=false
mDesiredDevice=null
mConnectingDisplay=null
mDisconnectingDisplay=null
mCancelingDisplay=null
mConnectedDevice=null
mConnectionRetriesLeft=0
mRemoteDisplay=null
mRemoteDisplayInterface=null
mRemoteDisplayConnected=false
mAdvertisedDisplay=null
mAdvertisedDisplaySurface=null
mAdvertisedDisplayWidth=0
mAdvertisedDisplayHeight=0
mAdvertisedDisplayFlags=0
mAvailableWifiDisplayPeers: size=0
DefaultHwVrDisplayAdapter
Display Devices: size=1
DisplayDeviceInfo{"内置屏幕": uniqueId="****", 1080 x 2340, modeId 1, defaultModeId 1, supportedModes [{id=1, width=1080, height=2340, fps=60.000004, alternativeRefreshRates=[]}], colorMode 0, supportedColorModes [0, 7], hdrCapabilities apabilities{mSupportedHdrTypes=[2, 3], mMaxLuminance=500.0, mMaxAverageLuminance=102.0, mMinLuminance=1.0}, allmSupported false, gameContentTypeSupported false, density 480, 391.885 x 391.026 dpi, appVsyncOff 2000000, presDeadline 15666666, cutout DisplayCutout{insets=Rect(0, 105 - 0, 0) waterfall=Insets{left=0, top=0, right=0, bottom=0} boundingRect={Bounds=[Rect(0, 0 - 0, 0), Rect(396, 0 - 684, 105), Rect(0, 0 - 0, 0), Rect(0, 0 - 0, 0)]} cutoutPathParserInfo={CutoutPathParserInfo{displayWidth=1080 displayHeight=2340 density={3.0} cutoutSpec={M147,0 L-147,0 C-134.9,1 -125.3,11.3 -125.3,23.8 L-125.3,23.8 C-125,55.3 -99.4,105 -68.2,105 L68.3,105 C99.6,105 125.2,55.2 125.4,23.5 C125.5,11.1 135,1 147,0} rotation={0} scale={1.0}}}}, touch INTERNAL, rotation 0, type INTERNAL, address ****, deviceProductInfo null, state ON, frameRateOverride , brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.4, FLAG_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS}
mAdapter=LocalDisplayAdapter
mUniqueId=local:0
mDisplayToken=android.os.BinderProxy@7c7887c
mCurrentLayerStack=0
mCurrentOrientation=0
mCurrentLayerStackRect=Rect(0, 0 - 1080, 2340)
mCurrentDisplayRect=Rect(0, 0 - 1080, 2340)
mCurrentSurface=null
mPhysicalDisplayId=0
mDisplayModeSpecs={baseModeId=1 allowGroupSwitching=false primaryRefreshRateRange=[0 60] appRequestRefreshRateRange=[0 Infinity]}
mDisplayModeSpecsInvalid=false
mActiveModeId=1
mActiveColorMode=0
mDefaultModeId=1
mState=ON
mBrightnessState=0.21568628
mBacklightAdapter=BacklightAdapter [useSurfaceControl=false (force_anyway? false), backlight=com.android.server.lights.LightsService$LightImpl@f8eca21]
mAllmSupported=false
mAllmRequested=false
mGameContentTypeSupported=false
mGameContentTypeRequested=false
mStaticDisplayInfo=StaticDisplayInfo{isInternal=true, density=3.0, secure=true, deviceProductInfo=null}
mSfDisplayModes=
DisplayMode{id=0, width=1080, height=2340, xDpi=391.885, yDpi=391.026, refreshRate=60.000004, appVsyncOffsetNanos=2000000, presentationDeadlineNanos=15666666, group=-1}
DisplayMode{id=1, width=1080, height=2340, xDpi=391.885, yDpi=391.026, refreshRate=60.000004, appVsyncOffsetNanos=2000000, presentationDeadlineNanos=15666666, group=-1}
DisplayMode{id=2, width=1080, height=2340, xDpi=391.885, yDpi=391.026, refreshRate=60.000004, appVsyncOffsetNanos=2000000, presentationDeadlineNanos=15666666, group=-1}
DisplayMode{id=3, width=1080, height=2340, xDpi=391.885, yDpi=391.026, refreshRate=60.000004, appVsyncOffsetNanos=2000000, presentationDeadlineNanos=15666666, group=-1}
mActiveSfDisplayMode=DisplayMode{id=2, width=1080, height=2340, xDpi=391.885, yDpi=391.026, refreshRate=60.000004, appVsyncOffsetNanos=2000000, presentationDeadlineNanos=15666666, group=-1}
mSupportedModes=
DisplayModeRecord{mMode={id=1, width=1080, height=2340, fps=60.000004, alternativeRefreshRates=[]}}
mSupportedColorModes=[0, 7]
mDisplayDeviceConfig=DisplayDeviceConfig{mLoadedFrom=<config.xml>, mBacklight=null, mNits=null, mRawBacklight=null, mRawNits=null, mBrightness=null, mBrightnessToBacklightSpline=MonotoneCubicSpline{[(0.0, 0.0: 1.0), (1.0, 1.0: 1.0)]}, mBacklightToBrightnessSpline=MonotoneCubicSpline{[(0.0, 0.0: 1.0), (1.0, 1.0: 1.0)]}, mBacklightMinimum=0.015686, mBacklightMaximum=1.0, mBrightnessDefault=0.4, mQuirks=null, isHbmEnabled=false, mHbmData=null, mBrightnessRampFastDecrease=0.7058824, mBrightnessRampFastIncrease=0.7058824, mBrightnessRampSlowDecrease=0.23529412, mBrightnessRampSlowIncrease=0.23529412, mAmbientLightSensor=Sensor{type: , name: , refreshRateRange: [0.0, Infinity]} , mProximitySensor=Sensor{type: , name: , refreshRateRange: [0.0, Infinity]} , mRefreshRateLimitations= []}
LogicalDisplayMapper:
mSingleDisplayDemoMode=false
mCurrentLayout=[{addr: {port=0}, dispId: 0(ON)}]
Logical Displays: size=1
Display 0:
mDisplayId=0
mPhase=1
mLayerStack=0
mHasContent=true
mDesiredDisplayModeSpecs={baseModeId=1 allowGroupSwitching=false primaryRefreshRateRange=[0 60] appRequestRefreshRateRange=[0 Infinity]}
mRequestedColorMode=0
mDisplayOffset=(0, 0)
mDisplayScalingDisabled=false
mPrimaryDisplayDevice=内置屏幕
mBaseDisplayInfo=DisplayInfo{"内置屏幕", displayId 0", displayGroupId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 1080 x 2340, largest app 1080 x 2340, smallest app 1080 x 2340, appVsyncOff 2000000, presDeadline 15666666, mode 1, defaultMode 1, modes [{id=1, width=1080, height=2340, fps=60.000004, alternativeRefreshRates=[]}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[2, 3], mMaxLuminance=500.0, mMaxAverageLuminance=102.0, mMinLuminance=1.0}, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, type INTERNAL, uniqueId "****", app 1080 x 2340, density 480 (391.885 x 391.026) dpi, layerStack 0, colorMode 0, supportedColorModes [0, 7], address ****, deviceProductInfo null, removeMode 0, refreshRateOverride 0.0, brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.4}
mOverrideDisplayInfo=DisplayInfo{"内置屏幕", displayId 0", displayGroupId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 1080 x 2340, largest app 2235 x 2235, smallest app 1080 x 975, appVsyncOff 2000000, presDeadl15666666, mode 1, defaultMode 1, modes [{id=1, width=1080, height=2340, fps=60.000004, alternativeRefreshRates=[]}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[2, 3], mMaxLuminance=500.0, mMaxAverageLuminance=102.0, mMinLuminance=1.0}, userDisabledHdrTypes [], minimalPostProcessingSupported false, rotation 0, state ON, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, type INTERNAL, uniqueId "****", app 1080 x 2235, density 480 (391.885 x 391.026) dpi, layerStack 0, colorMode 0, supportedColorModes [0, 7], address ****, deviceProductInfo null, removeMode 0, refreshRateOverride 0.0, brightnessMinimum 0.0, brightnessMaximum 1.0, brightnessDefault 0.4}
mRequestedMinimalPostProcessing=false
mFrameRateOverrides=[]
mPendingFrameRateOverrideUids={}
DeviceStateToLayoutMap:
Registered Layouts:
state(-1): [{addr: {port=0}, dispId: 0(ON)}]
DisplayModeDirector
mSupportedModesByDisplay:
0 -> [{id=1, width=1080, height=2340, fps=60.000004, alternativeRefreshRates=[]}]
mDefaultModeByDisplay:
0 -> {id=1, width=1080, height=2340, fps=60.000004, alternativeRefreshRates=[]}
mVotesByDisplay:
-1:
PRIORITY_USER_SETTING_MIN_REFRESH_RATE -> Vote{width=-1, height=-1, minRefreshRate=0.0, maxRefreshRate=Infinity, disableRefreshRateSwitching=false, baseModeRefreshRate=0.0}
PRIORITY_DEFAULT_REFRESH_RATE -> Vote{width=-1, height=-1, minRefreshRate=0.0, maxRefreshRate=60.0, disableRefreshRateSwitching=false, baseModeRefreshRate=0.0}
mModeSwitchingType: SWITCHING_TYPE_WITHIN_GROUPS
mAlwaysRespectAppRequest: false
SettingsObserver
mDefaultRefreshRate: 60.0
mDefaultPeakRefreshRate: 0.0
AppRequestObserver
mAppRequestedModeByDisplay:
mAppPreferredRefreshRateRangeByDisplay:
BrightnessObserver
mAmbientLux: -1.0
mBrightness: 42
mDefaultDisplayState: 2
mLowPowerModeEnabled: false
mRefreshRateChangeable: false
mShouldObserveDisplayLowChange: false
mShouldObserveAmbientLowChange: false
mRefreshRateInLowZone: 0
mShouldObserveDisplayHighChange: false
mShouldObserveAmbientHighChange: false
mRefreshRateInHighZone: 0
mLastSensorData: 0.0
mTimestamp: 1970-01-01 08:00:00.000
UdfpsObserver
mLocalHbmEnabled:
mGlobalHbmEnabled:
SensorObserver
mIsProxActive=true
mDozeStateByDisplay:
0 -> false
HbmObserver
mHbmEnabled: {}
Callbacks: size=14
0: mPid=1591, mWifiDisplayScanRequested=false
1: mPid=3573, mWifiDisplayScanRequested=false
2: mPid=3694, mWifiDisplayScanRequested=false
3: mPid=4106, mWifiDisplayScanRequested=false
4: mPid=4158, mWifiDisplayScanRequested=false
5: mPid=4180, mWifiDisplayScanRequested=false
6: mPid=4335, mWifiDisplayScanRequested=false
7: mPid=4397, mWifiDisplayScanRequested=false
8: mPid=4561, mWifiDisplayScanRequested=false
9: mPid=7567, mWifiDisplayScanRequested=false
10: mPid=8890, mWifiDisplayScanRequested=false
11: mPid=14398, mWifiDisplayScanRequested=false
12: mPid=22847, mWifiDisplayScanRequested=false
13: mPid=23964, mWifiDisplayScanRequested=false
Display Power Controllers: size=1
Display Power Controller:
mDisplayId=0
mLightSensor={Sensor name="als-tmd3702", vendor="ams", version=1, type=5, maxRange=10000.0, resolution=1.0, power=0.75, minDelay=0}
Display Power Controller Locked State:
mDisplayReadyLocked=true
mPendingRequestLocked=policy=BRIGHT, useProximitySensor=false, screenBrightnessOverride=NaN, useProximitySensorbyPhone=false, useAutoBrightness=true, screenAutoBrightnessAdjustmentOverride=NaN, screenLowPowerBrightnessFactor=1.0, blockScreenOn=false, lowPowerMode=false, boostScreenBrightness=false, dozeScreenBrightness=NaN, dozeScreenState=UNKNOWN, useSmartBacklight=false, brightnessWaitMode=false, brightnessWaitRet=false, screenAutoBrightness=-1, mScreenChangedReason=0, userId=0
mPendingRequestChangedLocked=false
mPendingWaitForNegativeProximityLocked=false
mPendingUpdatePowerStateLocked=false
Display Power Controller Configuration:
mScreenBrightnessRangeDefault=0.4
mScreenBrightnessDozeConfig=0.15
mScreenBrightnessDimConfig=0.05
mScreenBrightnessForVrRangeMinimum=0.307087
mScreenBrightnessForVrRangeMaximum=1.0
mScreenBrightnessForVrDefault=0.33464
mUseSoftwareAutoBrightnessConfig=true
mAllowAutoBrightnessWhileDozingConfig=true
mSkipScreenOnBrightnessRamp=false
mColorFadeFadesConfig=true
mColorFadeEnabled=true
mDisplayBlanksAfterDozeConfig=false
mBrightnessBucketsInDozeConfig=false
Display Power Controller Thread State:
mPowerRequest=policy=BRIGHT, useProximitySensor=false, screenBrightnessOverride=NaN, useProximitySensorbyPhone=false, useAutoBrightness=true, screenAutoBrightnessAdjustmentOverride=NaN, screenLowPowerBrightnessFactor=1.0, blockScreenOn=false, lowPowerMode=false, boostScreenBrightness=false, dozeScreenBrightness=NaN, dozeScreenState=UNKNOWN, useSmartBacklight=false, brightnessWaitMode=false, brightnessWaitRet=false, screenAutoBrightness=-1, mScreenChangedReason=0, userId=0
mUnfinishedBusiness=false
mWaitingForNegativeProximity=false
mProximitySensor={Sensor name="proximity-tmd3702", vendor="ams", version=1, type=8, maxRange=5.0, resolution=5.0, power=0.75, minDelay=0}
mProximitySensorEnabled=false
mProximityThreshold=5.0
mProximity=Unknown
mPendingProximity=Unknown
mPendingProximityDebounceTime=-1 (5933489 ms ago)
mScreenOffBecauseOfProximity=false
mLastUserSetScreenBrightness=0.21960784
mPendingScreenBrightnessSetting=NaN
mTemporaryScreenBrightness=NaN
mAutoBrightnessAdjustment=0.16470589
mBrightnessReason=automatic
mTemporaryAutoBrightnessAdjustment=NaN
mPendingAutoBrightnessAdjustment=NaN
mScreenBrightnessForVrFloat=0.33464
mAppliedAutoBrightness=true
mAppliedDimming=false
mAppliedLowPower=false
mAppliedScreenBrightnessOverride=false
mAppliedTemporaryBrightness=false
mDozing=false
mSkipRampState=RAMP_STATE_SKIP_NONE
mScreenOnBlockStartRealTime=7235426
mScreenOffBlockStartRealTime=6824874
mPendingScreenOnUnblocker=null
mPendingScreenOnExUnblocker=null
mPendingScreenOffUnblocker=null
mPendingScreenOff=false
mReportedToPolicy=REPORTED_TO_POLICY_SCREEN_ON
mScreenBrightnessRampAnimator.isAnimating()=false
mColorFadeOnAnimator.isStarted()=false
mColorFadeOffAnimator.isStarted()=false
Display Power State:
mStopped=false
mScreenState=ON
mScreenBrightness=0.21568628
mSdrScreenBrightness=0.21568628
mScreenReady=true
mScreenUpdatePending=false
mColorFadePrepared=false
mColorFadeLevel=1.0
mColorFadeReady=true
mColorFadeDrawPending=false
Photonic Modulator State:
mPendingState=ON
mPendingBacklight=0.21568628
mPendingSdrBacklight=0.21568628
mActualState=ON
mActualBacklight=0.21568628
mActualSdrBacklight=0.21568628
mStateChangeInProgress=false
mBacklightChangeInProgress=false
Color Fade State:
mPrepared=false
mMode=2
mDisplayLayerStack=0
mDisplayWidth=1080
mDisplayHeight=2340
mSurfaceVisible=false
mSurfaceAlpha=0.0
Automatic Brightness Controller Configuration:
mScreenBrightnessRangeMinimum=0.015686
mScreenBrightnessRangeMaximum=1.0
mScreenBrightnessRangeSetByAppMin=0
mScreenBrightnessRangeSetByAppMax=2147483647
mDozeScaleFactor=1.0
mInitialLightSensorRate=300
mNormalLightSensorRate=300
mLightSensorWarmUpTimeConfig=0
mBrighteningLightDebounceConfig=4000
mDarkeningLightDebounceConfig=8000
mResetAmbientLuxAfterWarmUpConfig=true
mAmbientLightHorizon=10000
mWeightingIntercept=10000
Automatic Brightness Controller State:
mLightSensor={Sensor name="als-tmd3702", vendor="ams", version=1, type=5, maxRange=10000.0, resolution=1.0, power=0.75, minDelay=0}
mLightSensorEnabled=true
mLightSensorEnableTime=5912933 (20560 ms ago)
mCurrentLightSensorRate=300
mAmbientLux=397.0
mAmbientLuxValid=true
mAmbientBrighteningThreshold=0.0
mAmbientDarkeningThreshold=0.0
mScreenBrighteningThreshold=0.2372549
mScreenDarkeningThreshold=0.17254902
mLastObservedLux=0.0
mLastObservedLuxTime=0 (5933493 ms ago)
mRecentLightSamples=0
mAmbientLightRingBuffer=[]
mScreenAutoBrightness=0.21568628
mDisplayPolicy=BRIGHT
mShortTermModelTimeout=300000
mShortTermModelAnchor=397.0
mShortTermModelValid=true
mBrightnessAdjustmentSamplePending=false
mBrightnessAdjustmentSampleOldLux=397.0
mBrightnessAdjustmentSampleOldBrightness=0.21568628
mForegroundAppPackageName=null
mPendingForegroundAppPackageName=null
mForegroundAppCategory=-1
mPendingForegroundAppCategory=-1
SimpleMappingStrategy
mSpline=MonotoneCubicSpline{[(0.0, 1.3026668E-5: 7.014867E-4), (8.0, 0.006261423: 0.0022356792), (55.0, 0.20354165: 1.6337163E-4), (350.0, 0.21960784: 0.0), (397.0, 0.21960784: 0.0), (1600.0, 0.88465065: 3.3712032E-4), (2550.0, 1.0: 1.2142037E-4)]}
mMaxGamma=3.0
mAutoBrightnessAdjustment=-1.0
mUserLux=397.0
mUserBrightness=0.21960784
HysteresisLevels
mBrighteningThresholds=[0.1]
mDarkeningThresholds=[0.2]
mThresholdLevels=[]
HysteresisLevels
mBrighteningThresholds=[0.1]
mDarkeningThresholds=[0.2]
mThresholdLevels=[]
HighBrightnessModeController:
mBrightness=0.0
mCurrentMin=0.0
mCurrentMax=1.0
mHbmMode=off
mHbmData=null
mAmbientLux=0.0 (old/invalid)
mIsInAllowedAmbientRange=false
mIsAutoBrightnessEnabled=false
mIsHdrLayerPresent=false
mBrightnessMin=0.0
mBrightnessMax=1.0
remainingTime=0
mIsTimeAvailable= false
mRunningStartTimeMillis=-1 (5933498 ms ago)
mIsThermalStatusWithinLimit=true
mIsBlockedByLowPowerMode=false
width*height=1080*2340
mEvents=
SkinThermalStatusObserver:
mStarted: false
ThermalService not available
BrightnessTracker state:
mStarted=false
mLastBatteryLevel=NaN
mLastBrightness=-1.0
mLastSensorReadings.size=0
mEventsDirty=false
mEvents.size=0
mWriteBrightnessTrackerStateScheduled=false
mSensorRegistered=false
mColorSamplingEnabled=false
mNoFramesToSample=0
mFrameRate=0.0
PersistentDataStore
mLoaded=true
mDirty=false
RememberedWifiDisplays:
0: 荣耀智慧屏 (02:bb:1c:90:96:13), isAvailable false, canConnect false, isRemembered false
1: 华为智慧屏 SE55 畅连版 (fa:89:d2:40:94:23), isAvailable false, canConnect false, isRemembered false
2: SPro mini65_a2ca (4e:31:2d:eb:a2:ca), isAvailable false, canConnect false, isRemembered false
3: A Pro 55_2eb9 (8a:12:ac:f4:2e:b9), isAvailable false, canConnect false, isRemembered false
4: ESPro65_68f7 (1a:ef:3a:ce:68:f7), isAvailable false, canConnect false, isRemembered false
5: K75C12G (4a:9e:9d:fe:21:cc), isAvailable false, canConnect false, isRemembered false
6: TCL 75C11G Pro-4D25 (86:c8:a0:66:fe:df), isAvailable false, canConnect false, isRemembered false
7: TCL 85C78H-38B3 (d2:12:55:e2:5d:dc), isAvailable false, canConnect false, isRemembered false
8: ES55_eef3 (62:1d:9d:de:ee:f3), isAvailable false, canConnect false, isRemembered false
9: 小米电视75_2945 (5e:c3:36:99:29:45), isAvailable false, canConnect false, isRemembered false
10: 华为智慧屏 SE55 (7a:66:9d:0e:f6:9e), isAvailable true, canConnect true, isRemembered false
DisplayStates:
0: local:0
ColorMode=0
BrightnessValue=0.21568628
StableDeviceValues:
StableDisplayWidth=1080
StableDisplayHeight=2340
BrightnessConfigurations:
通过以上方法也可以快速获取到 DisplayInfo 信息
DisplayInfo