android 线控耳机的简单使用

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);







  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值