1. 程式人生 > >Android 9.0 (P版本) 亮度控制介面變更

Android 9.0 (P版本) 亮度控制介面變更

1. Android 9.0 之前的亮度控制介面

import android.os.IPowerManager;
import android.provider.Settings;
import android.content.Context;


    /**
     * Used by the settings application and brightness control widgets to
     * temporarily override the current screen brightness setting so that the
     * user can observe the effect of an intended settings change without
     * applying it immediately.
     * <p>
     * The override will be canceled when the setting value is next updated.
     *
     * brightness The overridden brightness.
     * @see android.provider.Settings.System#SCREEN_BRIGHTNESS
     */
    public static void setBrightnessValue(Context mContext, int value) {
        try {
            IPowerManager power = IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE));
            if (power != null) {
                power.setTemporaryScreenBrightnessSettingOverride(value);
            }
        } catch (RemoteException doe) {
            Log.w(TAG, doe);
        }
        Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, value);
    }

    public static void setBrightnessValueBg(Context mContext, int value) {
        try {
            IPowerManager power = IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE));
            if (power != null) {
                power.setTemporaryScreenBrightnessSettingOverride(value);
            }
        } catch (RemoteException doe) {
            Log.w(TAG, doe);
        }
    }

1.1 參見Android 8.0的SystemUI程式碼

frameworks/base/packages/SystemUI/src/com/android/systemui/settings/BrightnessController.java:419: mPower.setTemporaryScreenBrightnessSettingOverride(brightness);

package com.android.systemui.settings;

public class BrightnessController implements ToggleSlider.Listener {

    private void setBrightness(int brightness) {
        try {
            mPower.setTemporaryScreenBrightnessSettingOverride(brightness);
        } catch (RemoteException ex) {
        }
    }

2. Android 9.0 的亮度控制介面

2.1 參考Android 9.0的SystemUI程式碼

package com.android.systemui.settings;

import android.hardware.display.DisplayManager;


public class BrightnessController implements ToggleSlider.Listener {

    private final DisplayManager mDisplayManager;


    private void setBrightness(int brightness) {
        mDisplayManager.setTemporaryBrightness(brightness);
    }

2.2 檢視 DisplayManager.setTemporaryBrightness原始碼

  • 原始碼路徑

frameworks/base/core/java/android/hardware/display/DisplayManager.java

[email protected]:/home/suhuazhi/9.1# find frameworks/ -name  "DisplayManager.java"
frameworks/base/core/java/android/hardware/display/DisplayManager.java

  • 檢視實現方式 -DisplayManager.setTemporaryBrightness
package android.hardware.display;

@SystemService(Context.DISPLAY_SERVICE)
public final class DisplayManager {

    private final DisplayManagerGlobal mGlobal;


    /**
     * Temporarily sets the brightness of the display.
     * <p>
     * Requires the {@link android.Manifest.permission#CONTROL_DISPLAY_BRIGHTNESS} permission.
     * </p>
     *
     * @param brightness The brightness value from 0 to 255.
     *
     * @hide Requires signature permission.
     */
    public void setTemporaryBrightness(int brightness) {
        mGlobal.setTemporaryBrightness(brightness);
    }
  • 原始碼路徑
    frameworks/base/core/java/android/hardware/display/DisplayManagerGlobal.java
[email protected]:/home/suhuazhi/9.1# find frameworks/ -name  "DisplayManagerGlobal.java"
frameworks/base/core/java/android/hardware/display/DisplayManagerGlobal.java
  • 檢視實現方式 -DisplayManagerGlobal.setTemporaryBrightness
package android.hardware.display;


public final class DisplayManagerGlobal {

    private final IDisplayManager mDm;


    /**
     * Temporarily sets the brightness of the display.
     * <p>
     * Requires the {@link android.Manifest.permission#CONTROL_DISPLAY_BRIGHTNESS} permission.
     * </p>
     *
     * @param brightness The brightness value from 0 to 255.
     *
     * @hide Requires signature permission.
     */
    public void setTemporaryBrightness(int brightness) {
        try {
            mDm.setTemporaryBrightness(brightness);
        } catch (RemoteException ex) {
            throw ex.rethrowFromSystemServer();
        }
    }
  • 檢視實現方式 -DisplayManagerService.setTemporaryBrightness
  • ./frameworks/base/services/core/java/com/android/server/display/DisplayManagerService.java

上述 IDisplayManager 是一個aidl介面,對應找DisplayManagerService即可

package com.android.server.display;

public final class DisplayManagerService extends SystemService {


        @Override // Binder call
        public void setTemporaryBrightness(int brightness) {
            mContext.enforceCallingOrSelfPermission(
                    Manifest.permission.CONTROL_DISPLAY_BRIGHTNESS,
                    "Permission required to set the display's brightness");
            final long token = Binder.clearCallingIdentity();
            try {
                synchronized (mSyncRoot) {
                    mDisplayPowerController.setTemporaryBrightness(brightness);
                }
            } finally {
                Binder.restoreCallingIdentity(token);
            }
        }

上述需要許可權

    <!-- DisplayManager.setTemporaryBrightness -->
    <uses-permission android:name="android.permission.CONTROL_DISPLAY_BRIGHTNESS" />

3. 綜合上述Android 9.0 的亮度控制介面

  • 許可權
    <!-- DisplayManager.setTemporaryBrightness -->
    <uses-permission android:name="android.permission.CONTROL_DISPLAY_BRIGHTNESS" />
  • 軟體介面
import android.hardware.display.DisplayManager;
import android.content.Context;
import android.os.ServiceManager;
import android.os.IPowerManager;

    /**
     * Used by the settings application and brightness control widgets to
     * temporarily override the current screen brightness setting so that the
     * user can observe the effect of an intended settings change without
     * applying it immediately.
     * <p>
     * The override will be canceled when the setting value is next updated.
     *
     * brightness The overridden brightness.
     * @see android.provider.Settings.System#SCREEN_BRIGHTNESS
     */
    public static void setBrightnessValue(Context mContext, int value) {
        setBrightnessValueBg(mContext, value);
        Settings.System.putInt(mContext.getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, value);
    }

    public static void setBrightnessValueBg(Context mContext, int value) {
        if (android.os.Build.VERSION.SDK_INT >= 27) {
            // <uses-permission android:name="android.permission.CONTROL_DISPLAY_BRIGHTNESS" />
            DisplayManager mDisplayManager = mContext.getSystemService(DisplayManager.class);
            mDisplayManager.setTemporaryBrightness(value);
        } else {
            /*try {
                IPowerManager power = IPowerManager.Stub.asInterface(ServiceManager.getService(Context.POWER_SERVICE));
                if (power != null) {
                    power.setTemporaryScreenBrightnessSettingOverride(value);
                }
            } catch (RemoteException doe) {
                Log.w(TAG, doe);
            }*/
        }
    }

相關推薦

Android 9.0 (P版本) 亮度控制介面變更

1. Android 9.0 之前的亮度控制介面 import android.os.IPowerManager; import android.provider.Settings; import android.content.Context; /

Android 9.0 (P版本) 亮度進度條變化等級更新

1. 現象 使用命令進行設定 adb shell settings put system screen_brightness x, 發現亮度進度條不再為 x/255 = n% 的關係了 實際測試的一些數值 設定亮度值 Android O 是否滿足 value / 255 An

Android 9.0 (P版本) SystemServer中的服務配置se linux許可權

## 1. SystemServer 的服務定義 Android P_9.0\frameworks\base\services\java\com\android\server\SystemServer.java /** * Starts a m

Android 9.0 (P版本) MTK平臺原生的待機智慧省電功能

1. 原生介面UI 2. 原始碼檢視 2.1 字串 Z:\9.1\vendor\mediatek\proprietary\packages\apps\MtkSettings_Eclipse\res_ext\values-zh-rCN\mtk_strings.x

Android 9.0/P http 網路請求的問題

Google表示,為保證使用者資料和裝置的安全,針對下一代 Android 系統(Android P) 的應用程式,將要求預設使用加密連線,這意味著 Android P 將禁止 App 使用所有未加密的連線,因此執行 Android P 系統的安卓裝置無論是接收或者傳送流量,未來都不能明碼傳輸,需要使用下一代

學習 :Android 9.0/P http 網路請求的問題

今天在網上看文章的時候看到了這一篇文章,說是Android9.0網路請求會有問題,然後好奇就仔細看了一下。看完之後感覺對自己以後可能有用處就寫這篇文章來記錄一下。以後用到的話可以拿來用一下。 為什麼特意注意了一下這篇文章呢,因為我們公司的請求一直用的是Http而不是用的Https,所以感覺以後升

Android 8.0 WiFi Ap 熱點控制介面

1. Android 7.0 及其以前的 WiFi 熱點介面 /** * Gets the Wi-Fi enabled state. * * @return One of {@link #WIFI_AP_STATE_D

android 5.0以上版本控制元件點選 水波紋效果

android api21及以上引入了控制元件點選的水波紋效果 1.可以直接給控制元件設定 android:background="?android:attr/selectableItemBackground"(有邊界效果) 或者  android:backgro

從源碼剖析PopupWindow 兼容Android 6.0以上版本點擊外部不消失

並且 gif upd 兼容 addview 初始 一個地方 || ping PopupWindow可以說是Google坑最多的一個控件,使用PopupWindow的時候沒有遇到幾個坑你都不好意思說你用過它,說一個可能大多數人都遇到過的一個坑:那就是我們想觸摸PopupWin

代碼快速“檢”“修”不是夢,阿裏雲MaxCompute Studio 2.9.0版本發布

流行 mic 代碼 IV max -c img http 離開 摘要: 阿裏雲MaxCompute Studio 2.9.0 新版本發布,此次發布的新版本,在原有功能的基礎上增加了新功能,分別是支持代碼檢查和快速修復;支持graph開發及調試。近日,阿裏雲大數據計算服務 M

Android 9.0新特性

進入 估算 電話 定制化 看電影 時間 體驗 cati adapt 1、全面屏支持,Android P加入了對劉海屏的支持,谷歌稱之為凹口屏幕(display with a cutout)。借助最新的提供的DisplayCutout類,開發者可以找到非功能區域的位置和形狀,

Android 9.0更新

調用 附近 drm 字節 解碼 產品 emf NPU 2018年 北京時間2018年8月7日上午,Google 發布了 Android 9.0 操作系統。並宣布系統版本 Android P 被正式命名為代號“Pie”。 Android 9.0 利用人工智能技術,讓手機變得更

Microsoft Dynamics CRM 9.0 OP 版本 安裝 的那些 雷

天天講安裝過程好無聊了,還是搞點有營養的東西來,那麼後面來說說剛出來的MSCRM OP 9.0 版本安裝的那些雷: 雷1:作業系統要求Windows 2016 Server         這點還好,因為之前安裝MSCRM 2016時就基本都安裝在OS 2016了

Microsoft Dynamics CRM 9.0 OP 版本 移動端

本次OP 版本做了架調整,新的移動端基本可以滿足客戶需求,其內容自己可配置選擇,滿足了一般企業的應用處理。 具體操作如下: 1、登入APP選擇應用(我使用手機瀏覽器)   2、開啟預設應用,現在就一個木得選擇。可以檢視儀表盤。   3、點進選單按鈕,你那麼聰明一定知道是

Android : 為系統服務新增 SeLinux 許可權 (Android 9.0)

一、SElinux在Android 8.0後的差異:   從Android 4.4到Android 7.0的SELinux策略構建方式合併了所有sepolicy片段(平臺和非平臺),然後在根目錄生成單一檔案,而Android 8.0開始關於selinux架構也類似於HIDL想把系統平臺的selinux策略和

[電池]Android 9.0 電池未充電與充電字串提示資訊

1. 電池電量提醒 1.1 未充電提醒 若沒有預估時間,則提示顯示電池百分比 若預估時間小於7分鐘,則提示手機可能即將關機 若預估時間小於15分鐘,則提示剩餘電池續航時間不到15分鐘 若15分鐘<預估時間<1天,則提示估計大約還能用到xx h

Android 6.0以上版本使用 Localsocket 與 ParcelFileDescriptor 獲取視訊流導致MediaRecorder start failed的問題

因為這段時間一直在搞Android音視訊相關的問題,遇到一個需求就是需要獲取實時的錄影資料,所以就需要獲取MediaRecorder的流資料,因為之前一直未做過相關需求,所以最後Google了一番,發現可以使用Localsocket和ParcelFileDescriptor 來獲取,但是設定之後發現

Android 9.0 功能和 API概覽(中文版)

Android 9 功能和 API 官方搬運: Android 9(API 級別 28)為使用者和開發者引入了眾多新特性和新功能。 本文重點介紹面向開發者的新功能。 利用 Wi-Fi RTT 進行室內定位 Android 9 添加了對 IEEE 802.1

Android 8.0之後版本新增Hidl Service

原址 本文以LED為例在aosp上新增HIDL,以熟悉整個過程。 1. 編寫hal檔案並編譯     在hardware/interfaces/目錄下建立led資料夾和基版本1.0,這個版本號分為兩部分,major.minor。major版本不變得話,

IBM Notes 9.0.1FP10版本釋出新的補丁程式IF5

大家好,才是真的好。我們說目前IBM Notes和Domino產品主要支援9.0.x和10.0版本,其中V10版本是近期的重點,但9.0.x也在繼續不斷在更新,畢竟使用9.0.x的企業使用者還是大多數,而且9.0.x的技術支援生命週期還遠未結束。 就在前天,我們