1.设置耳机按下中间键的广播接收者
import cn.zectec.ptt.utils.HeadSetUtil;
import cn.zectec.ptt.utils.HeadSetUtil.OnHeadSetListener;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.view.KeyEvent;
public class MediaButtonReceiver extends BroadcastReceiver {
private OnHeadSetListener headSetListener;
public MediaButtonReceiver() {
this.headSetListener = HeadSetUtil.getInstance().getOnHeadSetListener();
}
@Override
public void onReceive(Context context, Intent intent) {
String intentAction = intent.getAction();
if (Intent.ACTION_MEDIA_BUTTON.equals(intentAction)) {
KeyEvent keyEvent = (KeyEvent) intent
.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
if (keyEvent.getAction() == KeyEvent.ACTION_DOWN) {
if (headSetListener != null) {
headSetListener.onClickDown();
}
}
}
abortBroadcast();
}
}
里面用到了一个耳机的工具类
HeadSetUtil
2.耳机设置的工具类
import cn.zectec.ptt.receiver.MediaButtonReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.media.AudioManager;
public class HeadSetUtil {
/**
* 耳机线控管理工具类 单例
*/
protected static HeadSetUtil headSetUtil;
private OnHeadSetListener headSetListener;
public static synchronized HeadSetUtil getInstance() {
if (headSetUtil == null) {
headSetUtil = new HeadSetUtil();
}
return headSetUtil;
}
/**
* 设置耳机单击双击监听接口 必须在open前设置此接口,否则设置无效
* @param headSetListener
*/
public void setOnHeadSetListener(OnHeadSetListener headSetListener) {
this.headSetListener = headSetListener;
}
/**
*为MEDIA_BUTTON 意图注册接收器(注册开启耳机线控监听, 请务必在设置接口监听之后再调用此方法,否则接口无效)
* @param context
*/
public void open(Context context) {
if(headSetListener==null){
throw new IllegalStateException("please set headSetListener");
}
AudioManager audioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
ComponentName name = new ComponentName(context.getPackageName(),
MediaButtonReceiver.class.getName());
audioManager.registerMediaButtonEventReceiver(name);
}
/**
* 关闭耳机线控监听
* @param context
*/
public void close(Context context) {
AudioManager audioManager = (AudioManager) context
.getSystemService(Context.AUDIO_SERVICE);
ComponentName name = new ComponentName(context.getPackageName(),
MediaButtonReceiver.class.getName());
audioManager.unregisterMediaButtonEventReceiver(name);
}
/**
* 删除耳机单击双击监听接口
*/
public void delHeadSetListener() {
this.headSetListener = null;
}
/**
*获取耳机单击双击接口
*/
public OnHeadSetListener getOnHeadSetListener() {
return headSetListener;
}
/**
* 耳机按钮单双击监听
*/
public interface OnHeadSetListener {
/**
* 单击触发,主线程。 此接口真正触发是在单击操作1秒后 因为需要判断1秒内是否仍监听到点击,有的话那就是双击了
*/
public void onClick();
/**
* 双击触发,此接口在主线程,可以放心使用
*/
public void onDoubleClick();
/**
* 三连击
*/
public void onThreeClick();
/**
* 耳机中间键按下
*/
public void onClickDown();
/**
* 耳机中间键抬起
*/
public void onClickUp();
}
}
这个工具类可以设置耳机的按下、抬起、点击、双击等等的接口。
3.注册线控耳机的监听,处理自己的事情
// 注册耳机线控按钮监听
HeadSetUtil.getInstance().setOnHeadSetListener(headSetListener);
HeadSetUtil.getInstance().open(context);
private OnHeadSetListener headSetListener = new OnHeadSetListener() {
@Override
public void onClick() {
}
@Override
public void onDoubleClick() {
}
@Override
public void onThreeClick() {
}
@Override
public void onClickUp() {
}
@Override
public void onClickDown() {
}
};
4.记得不用时注销
// 注销耳机线控监听
HeadSetUtil.getInstance().close(context);