Android 修改系統螢幕亮度
[toc]
Android系統的亮度值取值範圍在0~255,資料型別是int型.
下面分兩步介紹:
- 介紹關於系統亮度的一些常用的方法
- 結合一個案例說說
一.系統亮度常用的方法
1. 獲得當前螢幕亮度的模式
/**
2. SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 為自動調節螢幕亮度
3. SCREEN_BRIGHTNESS_MODE_MANUAL=0 為手動調節螢幕亮度
*/
private int getScreenMode(){
int screenMode=0;
try {
screenMode =Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE);
}
catch (Exception localException){
}
return screenMode;
}
2.獲取當前螢幕亮度值0—255
/**
* 獲得當前螢幕亮度值 0--255
*/
private int getScreenBrightness (){
int screenBrightness=255;
try{
screenBrightness = Settings.System.getInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS);
}
catch (Exception localException){
}
return screenBrightness;
}
3.設定當前螢幕亮度的模式
/**
* 設定當前螢幕亮度的模式
* SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 為自動調節螢幕亮度
* SCREEN_BRIGHTNESS_MODE_MANUAL=0 為手動調節螢幕亮度
*/
private void setScreenMode(int paramInt){
try{
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS_MODE, paramInt);
}catch (Exception localException){
localException.printStackTrace();
}
}
4.設定當前螢幕亮度值0–255
/**
* 設定當前螢幕亮度值 0--255
*/
private void saveScreenBrightness(int paramInt){
try{
Settings.System.putInt(getContentResolver(), Settings.System.SCREEN_BRIGHTNESS, paramInt);
}
catch (Exception localException){
localException.printStackTrace();
}
}
5.儲存當前的螢幕亮度值,並使之生效
/**
* 儲存當前的螢幕亮度值,並使之生效
*/
private void setScreenBrightness(int paramInt){
Window localWindow = getWindow();
WindowManager.LayoutParams localLayoutParams = localWindow.getAttributes();
float f = paramInt / 255.0F;
localLayoutParams.screenBrightness = f;
localWindow.setAttributes(localLayoutParams);
}
二.案例分析
1.在佈局檔案中用了一個seekbar控制螢幕的亮度
<SeekBar
android:id="@+id/sb"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
2.在清單檔案中新增許可權,這裡有個坑
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_SETTINGS"/>
聰明的你會發現這裡有兩個使用者許可權。一個是sdk寫入許可權,一個是修改系統設定許可權這是一個特殊的許可權。
在android 6.0及以後,WRITE_SETTINGS許可權的保護等級已經由原來的dangerous升級為signature,這意味著我們的APP需要用系統簽名或者成為系統預裝軟體才能夠申請此許可權,並且還需要提示使用者跳轉到修改系統的設定介面去授予此許可權。
很多大神已經給出了答案:
//申請android.permission.WRITE_SETTINGS許可權的方式
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
//如果當前平臺版本大於23平臺
if (!Settings.System.canWrite(this)) {
//如果沒有修改系統的許可權這請求修改系統的許可權
Intent intent = new Intent(Settings.ACTION_MANAGE_WRITE_SETTINGS);
intent.setData(Uri.parse("package:" + getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivityForResult(intent, 0);
} else {
//有了許可權,你要做什麼呢?具體的動作
}
}
安裝demo的時候會進入如下介面:只有我們允許了,才能對系統的螢幕亮度進行修改。
android6.0以後很多許可權需要動態申請,以下是我這個專案中動態申請許可權的一個方法:
這是一個大神封裝好的關於動態申請許可權。用起來非常簡單:
大神的傳送門:http://www.yanzhenjie.com/#/
這裡就不多介紹了,程式碼如下:
//動態申請許可權
// 先判斷是否有許可權。
if (AndPermission.hasPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
// 有許可權,直接do anything.
processShow();
} else {
// 申請許可權。鏈式呼叫非常簡單
AndPermission.with(this)
.requestCode(100)
.permission(Manifest.permission.WRITE_EXTERNAL_STORAGE)
.send();
}
//許可權請求的回撥
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions,@NonNull int[] grantResults) {
AndPermission.onRequestPermissionsResult(requestCode, permissions, grantResults, listener);
}
private PermissionListener listener = new PermissionListener() {
@Override
public void onSucceed(int requestCode, List<String> grantPermissions) {
//許可權申請成功回撥
if (requestCode == 100) {
//在這個方法裡面去
processShow();
} else if (requestCode == 101) {
Toast.makeText(MainActivity.this, "許可權申請失敗", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onFailed(int requestCode, List<String> deniedPermissions) {
//許可權申請失敗的回撥
if (AndPermission.hasAlwaysDeniedPermission(MainActivity.this, deniedPermissions)) {
//第一種預設的提示語,會彈出一個對話方塊
AndPermission.defaultSettingDialog(MainActivity.this, requestCode).show();
}
}
};
/**
* 對seekBar進行監聽
*/
private void processShow() {
sb.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
//設定螢幕的亮度
setScreenBrightness(seekBar.getProgress());
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
}
/**
* 設定螢幕的亮度
*/
private void setScreenBrightness(int process) {
//設定當前視窗的亮度值.這種方法需要許可權android.permission.WRITE_EXTERNAL_STORAGE
WindowManager.LayoutParams localLayoutParams = getWindow().getAttributes();
float f = process / 255.0F;
localLayoutParams.screenBrightness = f;
getWindow().setAttributes(localLayoutParams);
//修改系統的亮度值,以至於退出應用程式亮度保持
saveBrightness(getContentResolver(),process);
}
public static void saveBrightness(ContentResolver resolver, int brightness) {
//改變系統的亮度值
//這裡需要許可權android.permission.WRITE_SETTINGS
//設定為手動調節模式
Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS_MODE,
Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL);
//儲存到系統中
Uri uri = android.provider.Settings.System.getUriFor(Settings.System.SCREEN_BRIGHTNESS);
android.provider.Settings.System.putInt(resolver, Settings.System.SCREEN_BRIGHTNESS, brightness);
resolver.notifyChange(uri, null);
}
相關推薦
Android 修改系統螢幕亮度
[toc] Android系統的亮度值取值範圍在0~255,資料型別是int型. 下面分兩步介紹: 介紹關於系統亮度的一些常用的方法 結合一個案例說說 一.系統亮度常用的方法 1. 獲得當前螢幕亮度的模式 /** 2. SC
centos 7 修改系統螢幕解析度
centos 7 修改系統螢幕解析度,命令方式和圖形方式的修改方法。 命令:xrandr 通過命令 xrandr 修改系統的解析度,輸入xrandr: bash [
Android 修改系統原始碼實現應用安裝白名單黑名單攔截功能
本文原創,旨在記錄。有不對或者可改進之處,歡迎大家指出。謝謝 方法一:系統自動掃描apk安裝方式 frameworks\base\services\java\com\android\server\pm下 修改PackageManagerService下的createDataDirsLI(
Android 修改系統字型大小,導致頁面展示異常解決方案
Android系統預設是允許修改系統本身的字型大小的,導致頁面展示異常。 頁面展示異常是因為系統字型大小影響到了程式中字型的單位sp,所以解決此問題的方案1是,將佈局中字型大小的單位sp換成dp 解決方案2:重寫Activity或Application中的getResou
Android 修改系統預設碟符名稱
1、修改路徑:frameworks/av/media/mtp/MtpServer.cpp 2、修改方法:MtpResponseCode MtpServer::doGetDeviceInfo() { mData.putString(string); // Man
Android修改手機預設亮度
目前的預設值是102 ,可以通過修改defaults.xml裡的變數值來改變這個預設值: frameworks\base\packages\SettingsProvider\res\values\de
android修改系統第一次開機時間
在settings中有個系統時間,顯示是1970年1月1日 客戶要求改成2018年1月1日 修改了SystemServer的 private static final long EARLIEST_SUPPORTED_TIME = 1514736000000l;//86
iOS調整系統螢幕亮度和音量
一 iOS調整系統螢幕亮度 在iOS5.0以前,無法直接修改系統螢幕亮度,到了iOS5.0以後,蘋果給開發者提供了相應的API,避免了之前間接調整螢幕亮度的假象,使之更加方便。
Android 修改系統預設時間格式
android系統第一次開機決定系統的時間格式的程式碼在frameworks層的SettingsProvider應用中。 1.新增xml配置 在frameworks\base\packages\SettingsProvider\res\values\defaults
Android 6.0 螢幕亮度控制引數
config_screenBrightnessDim—————– 應用超時時的螢幕亮度 config_screenBrightnessSettingMinimum—螢幕最低亮度 config_screenBrightnessDoze—————低電量時螢幕亮度
Android 修改系統 Calendar預設顯示月
packages\apps\Calendar\src\com\android\calendar\Utils.java /** * One of the Agenda/Day/Week/Month view types */ public interfa
全志a20 android原始碼 修改螢幕亮度
1. 修改android系統顯示亮度的最大最小限制 修改 frameworks\base\core\res\res\values\config.xml (很多預設配置都是在這個檔案裡修改的)以下程式碼 <!-- Minimum screen
android-設定系統及應用級螢幕亮度
/** * 獲得當前螢幕亮度的模式 * SCREEN_BRIGHTNESS_MODE_AUTOMATIC=1 為自動調節螢幕亮度 * SCREEN_BRIGHTNESS_MODE_MANUAL=0 為手動調節螢幕亮度 */ private i
通過程式碼調節Android螢幕亮度
轉載自:https://www.jb51.net/article/136383.html 1、宣告需要的許可權 <uses-permission android:name="android.permission.CHANGE_CONFIGURATION"/> <uses-p
Android系統手動修改系統顯示的DPI
有時候開發系統在初期階段由於UI設計上存在問題,導致DPI需要調整滿足UI介面的美觀,需要通過adb手動需要DPI,除錯OK之後將DPI值固定在程式碼中,如下: 手動修改DPI: 進入 adb roo
關於Android 設定螢幕亮度(適配Api23及更高版本)
這個需求應用場景主要是在有些頁面進入需要調節當前螢幕亮度,查詢相關資料都是api 23之前的,翻牆看了些文件,找到了解決方案,特此記錄下。 我們知道在api 23之後許可權需要動態去申請,但是有部分特殊許可權這樣是申請不到的,只有通過彈出設定窗口才能獲
Linux系統下螢幕亮度無法調節
終端輸入程式碼: sudo gedit /etc/default/grub 在開啟檔案中找到 GRUB_CMDLINE_LINUX="" 改成 GRUB_CMDLINE_LINUX="acpi_backlight=vendor“ 改好後儲存即可 然後升級grub:
Win7系統不能調整螢幕亮度
出現問題的情形: 新安裝的Windows7旗艦版系統,不能夠調整螢幕的亮度,在(1)電源選項中直接沒有進度條進行亮度的調節,(2)使用win+x鍵彈出的Windows移動中心也沒有顯示屏亮度調節欄 出現問題的原因:新安裝的系統驅動程式版本與硬體不夠匹配,不能夠進行正常執行,
[sg] Android 6.0 修改系統預設時區和修改12小時製為24小時制
修改預設時區 在最終編譯出的配置檔案build.prop增加屬性 persist.sys.timezone=Asia/Shanghai (我這裡預設選擇東八區上海,其他對應的時區在frameworks\base\core\res\res\xml\time_z
Android中如何修改系統時間(應用程式獲得系統許可權)
在 Android 的API中有提供 SystemClock.setCurrentTimeMillis()函式來修改系統時間,可惜無論你怎麼呼叫這個函式都是沒用的,無論模擬器還是真機,在logcat中總會得到"Unable to open alarm driver: Permission denied "