lightsService

本文深入解析了Android系统中灯光服务(LightsService)的工作原理及其实现细节,包括各种灯光类型的定义,如背光、键盘灯等,以及底层硬件驱动(button light driver)的介绍。文章覆盖了从Java层到C/C++层的实现,提供了源代码位置和相关链接。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://max.book118.com/html/2016/0420/40891588.shtm

 

    public static final int LIGHT_ID_BACKLIGHT = 0;
    public static final int LIGHT_ID_KEYBOARD = 1;
    public static final int LIGHT_ID_BUTTONS = 2;
    public static final int LIGHT_ID_BATTERY = 3;
    public static final int LIGHT_ID_NOTIFICATIONS = 4;
    public static final int LIGHT_ID_ATTENTION = 5;
    public static final int LIGHT_ID_BLUETOOTH = 6;
    public static final int LIGHT_ID_WIFI = 7;
 //wangjiaying add for bnkey lights start
    public static final int LIGHT_ID_BUTTONS_CENTER = 8;
//wangjiaying add for bnkey lights end
    public static final int LIGHT_ID_COUNT = 9;

 

LightsService.java

com_android_server_LightsService.cpp

lights.h

 

 

 

liblights.default.so /system/lib/hw

 

http://blog.youkuaiyun.com/g_salamander/article/details/7946026

led-class是button light driver的核心层,代码位于drivers/leds/目录下

 

 

127|console:/ # 127|console:/ # dumpsys display DISPLAY MANAGER (dumpsys display) mOnlyCode=false mSafeMode=false mPendingTraversal=false mGlobalDisplayState=ON mNextNonDefaultDisplayId=2 mViewports=[DisplayViewport{type=INTERNAL, valid=true, isActive=true, displayId=0, uniqueId='local:129', physicalPort=129, orientation=0, logicalFrame=Rect(0, 0 - 4032, 756), physicalFrame=Rect(0, 0 - 4032, 756), deviceWidth=4032, deviceHeight=756}] mDefaultDisplayDefaultColorMode=0 mSingleDisplayDemoMode=false mWifiDisplayScanRequestCount=0 mStableDisplaySize=Point(4032, 756) mMinimumBrightnessCurve=[(0.0, 0.0), (2000.0, 50.0), (4000.0, 90.0)] Display Adapters: size=4 LocalDisplayAdapter VirtualDisplayAdapter OverlayDisplayAdapter mCurrentOverlaySetting= mOverlays: size=0 WifiDisplayAdapter mCurrentStatus=WifiDisplayStatus{featureState=1, scanState=0, activeDisplayState=0, activeDisplay=null, displays=[], sessionInfo=WifiDisplaySessionInfo: Client/Owner: Client GroupId: Passphrase: SessionId: 0 IP Address: } mFeatureState=1 mScanState=0 mActiveDisplayState=0 mActiveDisplay=null mDisplays=[] mAvailableDisplays=[] mRememberedDisplays=[] mPendingStatusChangeBroadcast=false mSupportsProtectedBuffers=true mDisplayController: mWifiDisplayOnSetting=false mWifiP2pEnabled=false mWfdEnabled=false mWfdEnabling=false mNetworkInfo=null 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 Display Devices: size=2 DisplayDeviceInfo{"内置屏幕": uniqueId="local:129", 4032 x 756, modeId 1, defaultModeId 1, supportedModes [{id=1, width=4032, height=756, fps=60.000004}], colorMode 0, supportedColorModes [0], HdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, allmSupported false, gameContentTypeSupported false, density 160, 152.173 x 152.4 dpi, appVsyncOff 1000000, presDeadline 16666666, touch INTERNAL, rotation 0, type INTERNAL, address {port=129}, deviceProductInfo null, state ON, FLAG_DEFAULT_DISPLAY, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS} mAdapter=LocalDisplayAdapter mUniqueId=local:129 mDisplayToken=android.os.BinderProxy@88032be mCurrentLayerStack=0 mCurrentOrientation=0 mCurrentLayerStackRect=Rect(0, 0 - 4032, 756) mCurrentDisplayRect=Rect(0, 0 - 4032, 756) mCurrentSurface=null mPhysicalDisplayId=129 mDisplayModeSpecs={baseModeId=1 primaryRefreshRateRange=[0 60] appRequestRefreshRateRange=[0 Infinity]} mDisplayModeSpecsInvalid=false mActiveConfigId=0 mActiveModeId=1 mActiveColorMode=0 mDefaultModeId=1 mState=ON mBrightnessState=0.05 mBacklight=com.android.server.lights.LightsService$LightImpl@affaf1f mAllmSupported=false mAllmRequested=false mGameContentTypeSupported=false mGameContentTypeRequested=false mDisplayInfo=DisplayInfo{isInternal=true, density=1.0, secure=true, deviceProductInfo=null} mDisplayConfigs= DisplayConfig{width=4032, height=756, xDpi=152.173, yDpi=152.4, refreshRate=60.000004, appVsyncOffsetNanos=1000000, presentationDeadlineNanos=16666666, configGroup=0} mSupportedModes= DisplayModeRecord{mMode={id=1, width=4032, height=756, fps=60.000004}} mSupportedColorModes=[0] DisplayDeviceInfo{"内置屏幕": uniqueId="local:130", 1920 x 720, modeId 2, defaultModeId 2, supportedModes [{id=2, width=1920, height=720, fps=60.000004}], colorMode 0, supportedColorModes [0], HdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, allmSupported false, gameContentTypeSupported false, density 160, 167.013 x 167.779 dpi, appVsyncOff 1000000, presDeadline 16666666, touch INTERNAL, rotation 0, type INTERNAL, address {port=130}, deviceProductInfo null, state ON, FLAG_ROTATES_WITH_CONTENT, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS} mAdapter=LocalDisplayAdapter mUniqueId=local:130 mDisplayToken=android.os.BinderProxy@733326c mCurrentLayerStack=0 mCurrentOrientation=0 mCurrentLayerStackRect=Rect(0, 0 - 4032, 756) mCurrentDisplayRect=Rect(0, 180 - 1920, 540) mCurrentSurface=null mPhysicalDisplayId=130 mDisplayModeSpecs={baseModeId=2 primaryRefreshRateRange=[0 0] appRequestRefreshRateRange=[0 0]} mDisplayModeSpecsInvalid=true mActiveConfigId=0 mActiveModeId=2 mActiveColorMode=0 mDefaultModeId=2 mState=ON mBrightnessState=NaN mBacklight=null mAllmSupported=false mAllmRequested=false mGameContentTypeSupported=false mGameContentTypeRequested=false mDisplayInfo=DisplayInfo{isInternal=true, density=1.0, secure=true, deviceProductInfo=null} mDisplayConfigs= DisplayConfig{width=1920, height=720, xDpi=167.013, yDpi=167.779, refreshRate=60.000004, appVsyncOffsetNanos=1000000, presentationDeadlineNanos=16666666, configGroup=0} mSupportedModes= DisplayModeRecord{mMode={id=2, width=1920, height=720, fps=60.000004}} mSupportedColorModes=[0] Logical Displays: size=2 Display 0: mDisplayId=0 mLayerStack=0 mHasContent=true mDesiredDisplayModeSpecs={baseModeId=1 primaryRefreshRateRange=[0 60] appRequestRefreshRateRange=[0 Infinity]} mRequestedColorMode=0 mDisplayOffset=(0, 0) mDisplayScalingDisabled=false mPrimaryDisplayDevice=内置屏幕 mBaseDisplayInfo=DisplayInfo{" 置屏幕", displayId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 4032 x 756, largest app 4032 x 756, smallest app 4032 x 756, appVsyncOff 1000000, presDeadline 16666666, mode 1, defaultMode 1, modes [{id=1, width=4032, height=756, fps=60.000004}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, minimalPostProcessingSupported false, rotation 0, state ON, type INTERNAL, uniqueId "local:129", app 4032 x 756, density 160 (152.173 x 152.4) dpi, layerStack 0, colorMode 0, supportedColorModes [0], address {port=129}, deviceProductInfo null, removeMode 0} mOverrideDisplayInfo=DisplayInfo{"内置屏幕", displayId 0, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 4032 x 756, largest app 4032 x 3828, smallest app 756 x 552, appVsyncOff 1000000, presDeadline 16666666, mode 1, defaultMode 1, modes [{id=1, width=4032, height=756, fps=60.000004}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, minimalPostProcessingSupported false, rotation 0, state ON, type INTERNAL, uniqueId "local:129", app 4032 x 648, density 160 (152.173 x 152.4) dpi, layerStack 0, colorMode 0, supportedColorModes [0], address {port=129}, deviceProductInfo null, removeMode 0} mRequestedMinimalPostProcessing=false Display 1: mDisplayId=1 mLayerStack=1 mHasContent=false mDesiredDisplayModeSpecs={baseModeId=2 primaryRefreshRateRange=[0 60] appRequestRefreshRateRange=[0 Infinity]} mRequestedColorMode=0 mDisplayOffset=(0, 0) mDisplayScalingDisabled=false mPrimaryDisplayDevice=内置屏幕 mBaseDisplayInfo=DisplayInfo{"内置屏幕", displayId 1, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 1920 x 720, largest app 1920 x 720, smallest app 1920 x 720, appVsyncOff 1000000, presDeadline 16666666, mode 2, defaultMode 2, modes [{id=2, width=1920, height=720, fps=60.000004}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, minimalPostProcessingSupported false, rotation 0, state ON, type INTERNAL, uniqueId "local:130", app 1920 x 720, density 160 (167.013 x 167.779) dpi, layerStack 1, colorMode 0, supportedColorModes [0], address {port=130}, deviceProductInfo null, removeMode 0} mOverrideDisplayInfo=DisplayInfo{"内置屏幕", displayId 1, FLAG_SECURE, FLAG_SUPPORTS_PROTECTED_BUFFERS, FLAG_TRUSTED, real 1920 x 720, largest app 1920 x 1920, smallest app 720 x 720, appVsyncOff 1000000, presDeadline 16666666, mode 2, defaultMode 2, modes [{id=2, width=1920, height=720, fps=60.000004}], hdrCapabilities HdrCapabilities{mSupportedHdrTypes=[], mMaxLuminance=500.0, mMaxAverageLuminance=500.0, mMinLuminance=0.0}, minimalPostProcessingSupported false, rotation 0, state ON, type INTERNAL, uniqueId "local:130", app 1920 x 720, density 160 (167.013 x 167.779) dpi, layerStack 1, colorMode 0, supportedColorModes [0], address {port=130}, deviceProductInfo null, removeMode 0} mRequestedMinimalPostProcessing=false DisplayModeDirector mSupportedModesByDisplay: 0 -> [{id=1, width=4032, height=756, fps=60.000004}] 1 -> [{id=2, width=1920, height=720, fps=60.000004}] mDefaultModeByDisplay: 0 -> {id=1, width=4032, height=756, fps=60.000004} 1 -> {id=2, width=1920, height=720, fps=60.000004} mVotesByDisplay: -1: PRIORITY_USER_SETTING_MIN_REFRESH_RATE -> Vote{width=-1, height=-1, minRefreshRate=0.0, maxRefreshRate=Infinity} PRIORITY_DEFAULT_REFRESH_RATE -> Vote{width=-1, height=-1, minRefreshRate=0.0, maxRefreshRate=60.0} SettingsObserver mDefaultRefreshRate: 60.0 mDefaultPeakRefreshRate: 0.0 AppRequestObserver mAppRequestedModeByDisplay: BrightnessObserver mAmbientLux: -1.0 mBrightness: 59 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 Callbacks: size=65 0: mPid=1432, mWifiDisplayScanRequested=false 1: mPid=1797, mWifiDisplayScanRequested=false 2: mPid=1904, mWifiDisplayScanRequested=false 3: mPid=1935, mWifiDisplayScanRequested=false 4: mPid=2008, mWifiDisplayScanRequested=false 5: mPid=2058, mWifiDisplayScanRequested=false 6: mPid=2068, mWifiDisplayScanRequested=false 7: mPid=2107, mWifiDisplayScanRequested=false 8: mPid=2135, mWifiDisplayScanRequested=false 9: mPid=2153, mWifiDisplayScanRequested=false 10: mPid=2197, mWifiDisplayScanRequested=false 11: mPid=2224, mWifiDisplayScanRequested=false 12: mPid=2251, mWifiDisplayScanRequested=false 13: mPid=2310, mWifiDisplayScanRequested=false 14: mPid=2366, mWifiDisplayScanRequested=false 15: mPid=2415, mWifiDisplayScanRequested=false 16: mPid=2456, mWifiDisplayScanRequested=false 17: mPid=2476, mWifiDisplayScanRequested=false 18: mPid=2522, mWifiDisplayScanRequested=false 19: mPid=2562, mWifiDisplayScanRequested=false 20: mPid=2604, mWifiDisplayScanRequested=false 21: mPid=2662, mWifiDisplayScanRequested=false 22: mPid=2701, mWifiDisplayScanRequested=false 23: mPid=2750, mWifiDisplayScanRequested=false 24: mPid=2800, mWifiDisplayScanRequested=false 25: mPid=2837, mWifiDisplayScanRequested=false 26: mPid=2958, mWifiDisplayScanRequested=false 27: mPid=3287, mWifiDisplayScanRequested=false 28: mPid=3326, mWifiDisplayScanRequested=false 29: mPid=3365, mWifiDisplayScanRequested=false 30: mPid=3399, mWifiDisplayScanRequested=false 31: mPid=3428, mWifiDisplayScanRequested=false 32: mPid=3451, mWifiDisplayScanRequested=false 33: mPid=3486, mWifiDisplayScanRequested=false 34: mPid=3517, mWifiDisplayScanRequested=false 35: mPid=3566, mWifiDisplayScanRequested=false 36: mPid=3651, mWifiDisplayScanRequested=false 37: mPid=3683, mWifiDisplayScanRequested=false 38: mPid=3726, mWifiDisplayScanRequested=false 39: mPid=3749, mWifiDisplayScanRequested=false 40: mPid=3782, mWifiDisplayScanRequested=false 41: mPid=3822, mWifiDisplayScanRequested=false 42: mPid=3891, mWifiDisplayScanRequested=false 43: mPid=3920, mWifiDisplayScanRequested=false 44: mPid=3973, mWifiDisplayScanRequested=false 45: mPid=4006, mWifiDisplayScanRequested=false 46: mPid=4095, mWifiDisplayScanRequested=false 47: mPid=4153, mWifiDisplayScanRequested=false 48: mPid=4239, mWifiDisplayScanRequested=false 49: mPid=4326, mWifiDisplayScanRequested=false 50: mPid=4640, mWifiDisplayScanRequested=false 51: mPid=4695, mWifiDisplayScanRequested=false 52: mPid=4799, mWifiDisplayScanRequested=false 53: mPid=4945, mWifiDisplayScanRequested=false 54: mPid=6161, mWifiDisplayScanRequested=false 55: mPid=7091, mWifiDisplayScanRequested=false 56: mPid=7185, mWifiDisplayScanRequested=false 57: mPid=7532, mWifiDisplayScanRequested=false 58: mPid=7545, mWifiDisplayScanRequested=false 59: mPid=7560, mWifiDisplayScanRequested=false 60: mPid=7594, mWifiDisplayScanRequested=false 61: mPid=8049, mWifiDisplayScanRequested=false 62: mPid=11273, mWifiDisplayScanRequested=false 63: mPid=11644, mWifiDisplayScanRequested=false 64: mPid=26320, mWifiDisplayScanRequested=false Display Power Controller Locked State: mDisplayReadyLocked=true mPendingRequestLocked=policy=DIM, useProximitySensor=false, screenBrightnessOverride=NaN, useAutoBrightness=false, screenAutoBrightnessAdjustmentOverride=NaN, screenLowPowerBrightnessFactor=1.0, blockScreenOn=false, lowPowerMode=false, boostScreenBrightness=false, dozeScreenBrightness=NaN, dozeScreenState=UNKNOWN mPendingRequestChangedLocked=false mPendingWaitForNegativeProximityLocked=false mPendingUpdatePowerStateLocked=false Display Power Controller Configuration: mScreenBrightnessDozeConfig=0.0 mScreenBrightnessDimConfig=0.05 mScreenBrightnessDefault=0.39763778 mScreenBrightnessForVrRangeMinimum=0.307087 mScreenBrightnessForVrRangeMaximum=1.0 mScreenBrightnessForVrDefault=0.33464 mUseSoftwareAutoBrightnessConfig=true mAllowAutoBrightnessWhileDozingConfig=false mSkipScreenOnBrightnessRamp=false mColorFadeFadesConfig=false mColorFadeEnabled=true mDisplayBlanksAfterDozeConfig=false mBrightnessBucketsInDozeConfig=false Display Power Controller Thread State: mPowerRequest=policy=DIM, useProximitySensor=false, screenBrightnessOverride=NaN, useAutoBrightness=false, screenAutoBrightnessAdjustmentOverride=NaN, screenLowPowerBrightnessFactor=1.0, blockScreenOn=false, lowPowerMode=false, boostScreenBrightness=false, dozeScreenBrightness=NaN, dozeScreenState=UNKNOWN mUnfinishedBusiness=false mWaitingForNegativeProximity=false mProximitySensor=null mProximitySensorEnabled=false mProximityThreshold=0.0 mProximity=Unknown mPendingProximity=Unknown mPendingProximityDebounceTime=-1 (3486036 ms ago) mScreenOffBecauseOfProximity=false mLastUserSetScreenBrightnessFloat=0.0 mPendingScreenBrightnessSettingFloat=NaN mTemporaryScreenBrightnessFloat=NaN mAutoBrightnessAdjustment=0.0 mBrightnessReason=manual [ dim ] mTemporaryAutoBrightnessAdjustment=NaN mPendingAutoBrightnessAdjustment=NaN mScreenBrightnessForVrFloat=0.33464 mAppliedAutoBrightness=false mAppliedDimming=true mAppliedLowPower=false mAppliedScreenBrightnessOverride=false mAppliedTemporaryBrightness=false mDozing=false mSkipRampState=RAMP_STATE_SKIP_NONE mScreenOnBlockStartRealTime=1221052 mScreenOffBlockStartRealTime=1188731 mPendingScreenOnUnblocker=null mPendingScreenOffUnblocker=null mPendingScreenOff=false mReportedToPolicy=REPORTED_TO_POLICY_SCREEN_ON mScreenBrightnessRampAnimator.isAnimating()=false mColorFadeOnAnimator.isStarted()=false mColorFadeOffAnimator.isStarted()=false Display Power State: mScreenState=ON mScreenBrightness=0.05 mScreenReady=true mScreenUpdatePending=false mColorFadePrepared=false mColorFadeLevel=1.0 mColorFadeReady=true mColorFadeDrawPending=false Photonic Modulator State: mPendingState=ON mPendingBacklight=0.05 mActualState=ON mActualBacklight=0.05 mStateChangeInProgress=false mBacklightChangeInProgress=false Color Fade State: mPrepared=false mMode=1 mDisplayLayerStack=0 mDisplayWidth=4032 mDisplayHeight=756 mSurfaceVisible=false mSurfaceAlpha=0.0 Automatic Brightness Controller Configuration: mScreenBrightnessRangeMinimum=0.035433073 mScreenBrightnessRangeMaximum=1.0 mDozeScaleFactor=1.0 mInitialLightSensorRate=250 mNormalLightSensorRate=250 mLightSensorWarmUpTimeConfig=0 mBrighteningLightDebounceConfig=4000 mDarkeningLightDebounceConfig=8000 mResetAmbientLuxAfterWarmUpConfig=true mAmbientLightHorizon=10000 mWeightingIntercept=10000 Automatic Brightness Controller State: mLightSensor=null mLightSensorEnabled=false mLightSensorEnableTime=0 (3486035 ms ago) mCurrentLightSensorRate=-1 mAmbientLux=0.0 mAmbientLuxValid=false mAmbientBrighteningThreshold=0.0 mAmbientDarkeningThreshold=0.0 mScreenBrighteningThreshold=0.0 mScreenDarkeningThreshold=0.0 mLastObservedLux=0.0 mLastObservedLuxTime=0 (3486035 ms ago) mRecentLightSamples=0 mAmbientLightRingBuffer=[] mScreenAutoBrightness=NaN mDisplayPolicy=DIM mShortTermModelTimeout=300000 mShortTermModelAnchor=-1.0 mShortTermModelValid=true mBrightnessAdjustmentSamplePending=false mBrightnessAdjustmentSampleOldLux=0.0 mBrightnessAdjustmentSampleOldBrightness=0.0 mForegroundAppPackageName=null mPendingForegroundAppPackageName=null mForegroundAppCategory=-1 mPendingForegroundAppCategory=-1 SimpleMappingStrategy mSpline=MonotoneCubicSpline{[(0.0, 0.035433073: 0.003937008), (10.0, 0.07480315: 0.003937008), (30.0, 0.15354331: 0.003937008), (60.0, 0.27165353: 0.003937008), (100.0, 0.42913386: 0.003937008), (150.0, 0.62598425: 0.0032808399), (210.0, 0.78346455: 0.0037182854), (255.0, 1.0: 0.004811899)]} mMaxGamma=3.0 mAutoBrightnessAdjustment=0.0 mUserLux=-1.0 mUserBrightness=-1.0 HysteresisLevels mBrighteningThresholds=[0.1] mDarkeningThresholds=[0.2] mThresholdLevels=[] HysteresisLevels mBrighteningThresholds=[0.1] mDarkeningThresholds=[0.2] mThresholdLevels=[] 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: DisplayStates: StableDeviceValues: StableDisplayWidth=4032 StableDisplayHeight=756 BrightnessConfigurations: console:/ #
最新发布
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值