為android添加耳機狀態表徵圖

來源:互聯網
上載者:User

 原生態的android系統是沒有耳機插入或未插入的狀態指示的,本文就是講解如何添加耳機插入的狀態指示。如下

,當插入耳機後,在status bar上出現了一個耳機的表徵圖。
這個耳機的表徵圖和sim卡訊號等表徵圖在status bar的右邊,因此這個實現肯定不是通過notification實現的,那麼添加這個功能只能在framwork裡面尋找了。具體的修改步驟如下:
1.在frameworks/base/core/res/res/drawable-mdpi目錄先添加一個stat_sys_headset.png資源檔。這裡面資源檔的目錄要根據裝置的解析度來確定,我的裝置是HVGA的,因此資源檔放在drawable-mdpi目錄下。
2.修改frameworks/base/services/java/com/android/server/status/StatusBarPolicy.java

public class StatusBarPolicy {<br /> private static final String TAG = "StatusBarPolicy";<br /> private static StatusBarPolicy sInstance;<br /> ..... </p><p> // alarm clock<br /> // Icon lit when clock is set<br /> private IBinder mAlarmClockIcon;<br /> private IconData mAlarmClockIconData;<br /> //modify here start<br /> //HeadSet<br /> private IBinder mHeadSetPlugIcon;<br /> private IconData mHeadSetPlugIconData;<br /> //modify here end<br /> .....<br /> private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {<br /> @Override<br /> public void onReceive(Context context, Intent intent) {<br /> String action = intent.getAction();<br /> if (action.equals(Intent.ACTION_TIME_TICK)) {<br /> updateClock();<br /> }<br /> .....<br /> else if (action.equals(Intent.ACTION_ALARM_CHANGED)) {<br /> updateAlarm(intent);<br /> }<br /> //modify here start<br /> else if (action.equals(Intent.ACTION_HEADSET_PLUG)) {<br /> updateHeadset(intent);<br /> }<br /> //modify here end<br /> else if (action.equals(Intent.ACTION_SYNC_STATE_CHANGED)) {<br /> updateSyncState(intent);<br /> }<br /> ......<br /> };<br /> private StatusBarPolicy(Context context, StatusBarService service) {<br /> mContext = context;<br /> mService = service;<br /> mSignalStrength = new SignalStrength();<br /> if(FeatureOption.MTK_GEMINI_SUPPORT == true) {<br /> mSignalStrengthGemini = new SignalStrength();<br /> }<br /> mBatteryStats = BatteryStatsService.getService();<br /> ....<br /> //modify here start<br /> //HeadSet<br /> mHeadSetPlugIconData = IconData.makeIcon(<br /> "headset",<br /> null,com.android.internal.R.drawable.stat_sys_headset, 0, 0);<br /> mHeadSetPlugIcon = service.addIcon(mHeadSetPlugIconData, null);<br /> service.setIconVisibility(mHeadSetPlugIcon, false);<br /> //modify here end<br /> ....<br /> IntentFilter filter = new IntentFilter();<br /> // Register for Intent broadcasts for...<br /> filter.addAction(Intent.ACTION_TIME_TICK);<br /> ....<br /> //modify here start<br /> filter.addAction(Intent.ACTION_HEADSET_PLUG);<br /> //modify here end<br /> ....<br /> }<br /> //modify here start<br /> private final void updateHeadset(Intent intent) {<br /> Slog.d(TAG, "updateHeadset: state=" + intent.getIntExtra("state", 0));<br /> mService.setIconVisibility(mHeadSetPlugIcon, (intent.getIntExtra("state", 0) == 1)?true:false);<br /> }<br /> //modify here end<br /> .....<br />} 

3.修改frameworks/base/core/res/res/values/arrays.xml

<string-array name="status_bar_icon_order"><br /> <item><xliff:g id="id">clock</xliff:g></item><br /> <item><xliff:g id="id">secure</xliff:g></item><br /> <item><xliff:g id="id">alarm_clock</xliff:g></item><br /> <item><xliff:g id="id">battery</xliff:g></item><br /> <item><xliff:g id="id">phone_signal_2</xliff:g></item><br /> <item><xliff:g id="id">phone_signal</xliff:g></item><br /> <item><xliff:g id="id">phone_evdo_signal</xliff:g></item><br /> <item><xliff:g id="id">data_connection</xliff:g></item><br /> <item><xliff:g id="id">cdma_eri</xliff:g></item><br /> <item><xliff:g id="id">tty</xliff:g></item><br /> <item><xliff:g id="id">volume</xliff:g></item><br /> <item><xliff:g id="id">mute</xliff:g></item><br /> <item><xliff:g id="id">speakerphone</xliff:g></item><br /> <!-- modify here start. --><br /> <item><xliff:g id="id">headset</xliff:g></item><br /> <!-- modify here end --><br /> <item><xliff:g id="id">wifi</xliff:g></item><br /> <item><xliff:g id="id">tty</xliff:g></item><br /> <item><xliff:g id="id">bluetooth</xliff:g></item><br /> <item><xliff:g id="id">gps</xliff:g></item><br /> <item><xliff:g id="id">sync_active</xliff:g></item><br /> <item><xliff:g id="id">sync_failing</xliff:g></item><br /> <item><xliff:g id="id">ime</xliff:g></item><br /> </string-array> 

其中“headset”這個字串就是“mHeadSetPlugIconData = IconData.makeIcon( "headset", null0, 0);”中的第一個參數。“<item><xliff:g id="id">headset</xliff:g></item> ”這個語句的位置於表徵圖在status
bar上顯示的位置有關。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.