在狀態欄增加圖標(Android 6.0)


在Android 啟動之后,在SystemServer.java的run方法中,調用了StatusBarManagerService的構造方法,在StatusBarManagerService的構造方法中,加載了系統預置的所有icon,路徑在:/framework/base/core/res/res/values/config.xml中 mIcons.defineSlots(res.getStringArray(com.android.internal.R.array.config_statusBarIcons));。

如上述所示,在狀態欄增加圖標,首先要在/framework/base/core/res/res/values/config.xml的config_statusBarIcons中加入自己的字段,此處選擇的例子,是我在gm公司所做的人臉識別圖標。

    <string-array name="config_statusBarIcons">    
       <item><xliff:g id="id">hotspot</xliff:g></item>
       <item><xliff:g id="id">location</xliff:g></item>
       <item><xliff:g id="id">bluetooth</xliff:g></item>
       ......
       <item><xliff:g id="id">secure</xliff:g></item>
       <item><xliff:g id="id">clock</xliff:g></item>
        <item><xliff:g id="id">face_verify</xliff:g></item>
    </string-array>

然后在PhoneStatusBarPolicy中定義這個字段:

private static final String SLOT_FACE_VERIFY = "face_verify";
代碼路徑:frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\PhoneStatusBarPolicy.java

然后在該類的構造方法中,將圖標設置進去,此處可以默認不可見(根據交互)
mService.setIcon(SLOT_FACE_VERIFY, R.drawable.ic_statusbar_facecode, 0, null);
mService.setIconVisibility(SLOT_FACE_VERIFY, false);

對於該圖標可見性的控制,是通過廣播判斷的。自然是針對於人臉識別這一情況,識別service bind,發送開始識別廣播,onbind時,發送結束識別廣播。發送廣播的代碼就不寫了。

            else if (action.equals(ACTION_START_FACE_VERITY)) {
                mService.setIconVisibility(SLOT_FACE_VERIFY, true);
            } else if (action.equals(ACTION_STOP_FACE_VERITY)) {
                mService.setIconVisibility(SLOT_FACE_VERIFY, false);
            }

超級簡單的!當然,這個是只針對於系統圖標,對於信號圖標等,在SignalClusterView.里。

存下http://blog.csdn.net/yihongyuelan/article/details/7710584這篇好文章。雖然很老了,但是對於狀態欄的理解,非常有收獲。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM