1. 程式人生 > >Android8.0 解決設定中開啟充電提示音後充電卻沒提示音問題

Android8.0 解決設定中開啟充電提示音後充電卻沒提示音問題

       在android8.0以上的程式碼在設定 ---> 聲音 ---> 高階 中 有一個充電提示音的開關,當我們開啟後,插入充電器後,裝置顯示在充電但並沒有觸發提示音。其實這並不是android原生的bug,這裡的充電提示音指的是無線充電提示音,當只有無線充電的時候才會響起,然而android有三種充電方式,分別是:電源充電(充電寶和電源充電器),無線充電,USB充電(電腦USB等裝置)。如果要修改哪種充電有聲音要在framework。最後的修改是按照Android原始碼的的邏輯來走,而網上很多文章都是監聽充電廣播,在播放提示音。本文講解如何在 framework按照原始碼的邏輯來修改提示音,這樣將風險降到最低。

       首先我們來看frameworks/base/core/java/android/os/BatteryManager.java這個類,這是電池的Manager,在這裡我們可以看到android定義的三種充電方式:

      /** Power source is an AC charger. */
     public static final int BATTERY_PLUGGED_AC = 1;
     /** Power source is a USB port. */
     public static final int BATTERY_PLUGGED_USB = 2;
     /** Power source is wireless. */
     public
static final int BATTERY_PLUGGED_WIRELESS = 4;

        然後在來看frameworks/base/services/core/java/com/android/server/power/PowerManagerService.java這個類,PMS是負責Andorid系統中電源管理方面的工作。作為系統核心服務之一,和PKMS,AMS一樣,由SyetemServer run  出來的,比如裝置的常見功能如亮滅屏、亮度調節、低電量模式、保持CPU喚醒,還有充電等一系列電池相關的操作都是由它來完成的,這裡主要講解修改充電提示音的過程,所以不深入講解PMS的流程和功能。在這個類中的 private

void updateIsPoweredLocked(int dirty) 方法是中,是當裝置的或充電者充電模式發生改變時呼叫的,

只是發了一條訊息,然後看訊息接受的地方:

這裡只是播放提示音,如果想修改電源充電的提示音和無線充電的提示音不同,修改soundPath即可。到最後充電提示音已經講解完了,想要怎麼定製都很簡單了。