Android4.4監聽耳機插入處理方法
阿新 • • 發佈:2019-02-13
Android系統硬體檢測到耳機插入,並告訴底層當前插入的是純耳機,還是帶Mic的耳機。
底層在CallBack中接收到耳機插入訊息後,傳送廣播告訴上層,傳送廣播的action是
Intent.ACTION_HEADSET_PLUG。
一、Android4.4系統中處理耳機插入,在StatusBar中像手機訊號一樣的動態顯示效果方法如下:
1.frameworks/base/core/res/res/values/config.xml中的屬性config_statusBarIcons
中加入id為headset,用來在StatusBarIcon中建立headset對應的圖示:
<item><xliff:g id="id">headset</xliff:g></item>
2.frameworks/base/packages/SystemUI/res/drawable-mdpi/中加入StatusBar中要顯示的圖示
stat_sys_headset_with_mic.png //有mic的耳機
stat_sys_headset_without_mic.png //無mic的耳機
3.frameworks/base/packages/SystemUI/com.android.systemui.statusbar.phone.PhoneStatusBarPolicy.java
4.frameworks/base/services/java/com.android.server.StatusBarManagerService.java
中實現setIconVisibility介面,並呼叫StatusBar中setIcon介面實現顯示或取消耳機圖示。
二、若是應用中要監聽耳機插入動作,可以監聽action為Intent.ACTION_HEADSET_PLUG的廣播,
但是不能使用全域性的BroadcastReceiver接收,即是不能在應用AndroidManifest.xml中配置廣播接收器。
需在應用Activity或者是Service中,定義廣播接收器,接收到廣播後做相應的處理即可。
底層在CallBack中接收到耳機插入訊息後,傳送廣播告訴上層,傳送廣播的action是
Intent.ACTION_HEADSET_PLUG。
一、Android4.4系統中處理耳機插入,在StatusBar中像手機訊號一樣的動態顯示效果方法如下:
1.frameworks/base/core/res/res/values/config.xml中的屬性config_statusBarIcons
中加入id為headset,用來在StatusBarIcon中建立headset對應的圖示:
<item><xliff:g id="id">headset</xliff:g></item>
2.frameworks/base/packages/SystemUI/res/drawable-mdpi/中加入StatusBar中要顯示的圖示
stat_sys_headset_with_mic.png //有mic的耳機
stat_sys_headset_without_mic.png //無mic的耳機
3.frameworks/base/packages/SystemUI/com.android.systemui.statusbar.phone.PhoneStatusBarPolicy.java
中mIntentReceiver加入耳機插入的廣播處理:
else if (action.equals(Intent.ACTION_HEADSET_PLUG)) {
updateHeadSet(intent);
}
private final void updateHeadSet(Intent intent) { int state = intent.getIntExtra("state", -1); int mic = intent.getIntExtra("microphone", -1); Log.d(TAG, "=========updateHeadSet, state=" + state + ", mic=" + mic + "."); if (state == -1 || mic == -1) { return; } if (state == 1) { if (mic == 1) { mService.setIcon("headset", R.drawable.stat_sys_headset_with_mic, 0, null); mService.setIconVisibility("headset", true); } else { mService.setIcon("headset", R.drawable.stat_sys_headset_without_mic, 0, null); mService.setIconVisibility("headset", true); } // vibrate when headset plug in Vibrator vibrator = (Vibrator) mContext.getSystemService(Context.VIBRATOR_SERVICE); vibrator.vibrate(500); } else { mService.setIconVisibility("headset", false); } }
4.frameworks/base/services/java/com.android.server.StatusBarManagerService.java
中實現setIconVisibility介面,並呼叫StatusBar中setIcon介面實現顯示或取消耳機圖示。
二、若是應用中要監聽耳機插入動作,可以監聽action為Intent.ACTION_HEADSET_PLUG的廣播,
但是不能使用全域性的BroadcastReceiver接收,即是不能在應用AndroidManifest.xml中配置廣播接收器。
需在應用Activity或者是Service中,定義廣播接收器,接收到廣播後做相應的處理即可。