Android4.4监听耳机插入处理方法

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对应的图标:
  headset

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


你可能感兴趣的:(android技术)