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的技術支援生命週期還遠未結束。 就在前天,我們