1. 程式人生 > >Android 修改系統螢幕亮度

Android 修改系統螢幕亮度

[toc]
Android系統的亮度值取值範圍在0~255,資料型別是int型.
下面分兩步介紹:

  1. 介紹關於系統亮度的一些常用的方法
  2. 結合一個案例說說

一.系統亮度常用的方法

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 "