android蓝牙耳机下的语音(输入/识别)及按键监听

         第一次在csdn写博客,在此把自己折腾了两三天的一个问题的解决过程记录一下。

       背景:本人负责公司android平台的app开发,最近要开发一个语音助手类的app,类似于灵犀语音助手、虫洞语音助手等。其中有两个蓝牙耳机下的语音识别问题,比较折腾人,问题描述:1.蓝牙耳机连接下捕获蓝牙按键事件,启动语音识别;2.正常启动识别时也必须通过蓝牙耳机录入音频进行语音识别。这两个问题,测试发现灵犀语音助手都解决了,所以本人负责的这个app也必须解决。网上搜了相关的资料,基本上是凤毛麟角,因此本人在此贡献一点小发现供大家参考,如有不对的地方欢迎指正。

       针对第一个问题,蓝牙耳机的按键监听,墙内墙外的资料搜遍,没有发现完美的解决方案(这里看到有人提出的解决办法:http://blog.csdn.net/kangear/article/details/40430673,感觉有点另类,而且也不适合我的app的应用场景,所以没尝试),虽然接听键(该键还有很多功能,不细说,以下都称接听键)的单按、双按没法监听,但是长按却是可以捕获到,默认情况下,已经连接到android手机的蓝牙耳机,长按接听键几秒后会系统会发出一个action=android.intent.action.VOICE_COMMAND的Intent,灵犀语音助手就是使用这个来监听长按的,既然如此,我就仿照灵犀来做吧:

       1.首先,在AndroidManifest.xml中指定的一个activity (用于捕获蓝牙耳机长按事件的activity,以下以A代替之)中添加:

         <intent-filter android:priority="2147483647"&

  • 5
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
Android中,可以通过注册BroadcastReceiver来监听耳机按键事件。 首先,在AndroidManifest.xml中添加以下权限: ```xml <uses-permission android:name="android.permission.RECORD_AUDIO" /> <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> ``` 然后,在代码中注册BroadcastReceiver: ```java public class EarphoneButtonReceiver extends BroadcastReceiver { private static final String TAG = "EarphoneButtonReceiver"; @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (Intent.ACTION_MEDIA_BUTTON.equals(action)) { KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT); if (event != null && event.getAction() == KeyEvent.ACTION_DOWN) { int keyCode = event.getKeyCode(); switch (keyCode) { case KeyEvent.KEYCODE_MEDIA_PLAY: // 处理播放事件 break; case KeyEvent.KEYCODE_MEDIA_PAUSE: // 处理暂停事件 break; case KeyEvent.KEYCODE_MEDIA_NEXT: // 处理下一曲事件 break; case KeyEvent.KEYCODE_MEDIA_PREVIOUS: // 处理上一曲事件 break; case KeyEvent.KEYCODE_MEDIA_STOP: // 处理停止事件 break; default: break; } } } } } ``` 最后,在需要监听耳机按键事件的Activity中注册BroadcastReceiver: ```java private EarphoneButtonReceiver mEarphoneButtonReceiver; private void registerEarphoneButtonReceiver() { mEarphoneButtonReceiver = new EarphoneButtonReceiver(); IntentFilter filter = new IntentFilter(Intent.ACTION_MEDIA_BUTTON); registerReceiver(mEarphoneButtonReceiver, filter); } private void unregisterEarphoneButtonReceiver() { if (mEarphoneButtonReceiver != null) { unregisterReceiver(mEarphoneButtonReceiver); mEarphoneButtonReceiver = null; } } @Override protected void onResume() { super.onResume(); registerEarphoneButtonReceiver(); } @Override protected void onPause() { super.onPause(); unregisterEarphoneButtonReceiver(); } ``` 这样,当耳机按键事件发生,系统会发送一个广播,我们就可以在BroadcastReceiver中处理相应的事件了。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值