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中,定义广播接收器,接收到广播后做相应的处理即可。