http://codego.net/554937/

使用Android RecognizerIntent与蓝牙耳机 +

androidbluetooth-蓝牙speech-recognition-发言-承认
下面的编码,以在Android中启动语音识别:

PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);if (activities.size() == 0) {displayWarning("This device does not support speech recognition");return;
}Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);

这工作得很好。然而,它似乎并没有接受来自蓝牙耳机配对,而“手机音频”配置文件语音输入。 一,应用程序称为的SOUNDabout率有力的“Media音频”到“ 蓝牙 (单声道)(SCO)”。有了这个程序集,我的语音识别现在可以从我的耳机追踪我的语音输入。 如何RecognizerIntent,并从蓝牙耳机语音输入? 我在API级别16看到有一个新的动作ACTION_VOICE_SEARCH_HANDS_FREE意图形式可供选择。这是太新了,但这样就解决了我的问题呢? 我一定要围绕淤泥在AudioManager类(就像我的SOUNDabout正在做)将音频路由setBluetoothScoOn()或startBluetoothSco()? +
本文地址 :CodeGo.net/554937/

width="640" height="60" src="http://cb.baidu.com/ecom?adn=4&at=6&aurl=&cad=1&ccd=24&cec=UTF-8&cfv=14&ch=0&col=zh-CN&conOP=0&cpa=1&dai=5&dis=0&ltr=http%3A%2F%2Fblog.csdn.net%2Flihongyu65085%2Farticle%2Fdetails%2F39827251&ltu=http%3A%2F%2Fcodego.net%2F554937%2F&lunum=6&n=binfenkeji2010_cpr&pcs=1920x949&pis=10000x10000&ps=-1x-1&psr=1920x1080&pss=1920x0&qn=bf42aed2af105fc5&rad=&rs=301&rsi0=640&rsi1=60&rsi5=4&rss0=%23FFFFFF&rss1=%23FFFFFF&rss2=%230000ff&rss3=%23444444&rss4=%23008000&rss5=&rss6=%23e10900&rss7=&scale=&skin=&td_id=9223372032564535439&tn=text_default_640_60&tpr=1412947832520&ts=1&xuanting=0&dtm=BAIDU_DUP2_SETJSONADSLOT&dc=2&di=972677" align="center,center" marginwidth="0" marginheight="0" scrolling="no" frameborder="0" allowtransparency="true">

-------------------------------------------------------------------------------------------------------------------------

1.  许可清单

<uses-permission android:name="android.permission.BLUETOOTH" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> 

创建一个内部类 BluetoothHelper extends BluetoothHeadSetUtils 在你的 ActivityService 。报告 mBluetoothHelper 并实例化它 onCreate()

BluetoothHelper mBluetoothHelper;@Override
public void onCreate()
{ mBluetoothHelper = new BluetoothHelper(this);
} @Override
onResume()
{ mBluetoothHelper.start();
}@Override
onPause()
{mBluetoothHelper.stop();
}// inner class
// BluetoothHeadsetUtils is an abstract class that has
// 4 abstracts methods that need to be implemented.
private class BluetoothHelper extends BluetoothHeadSetUtils
{public BluetoothHelper(Context context){super(context);}@Overridepublic void onScoAudioDisconnected(){// Cancel speech recognizer if desired}@Overridepublic void onScoAudioConnected(){   // Should start speech recognition here if not already started }@Overridepublic void onHeadsetDisconnected(){}@Overridepublic void onHeadsetConnected(){}
}

蓝牙耳机 与文本语音转换,你需要设置的速度AudioManager类STREAM_VOICE_CALL在拨打电话之前说话。下面的销

protected void speak(String text)
{HashMap<String, String> myHashRender = new HashMap<String, String>();if (mBluetoothHelper.isOnHeadsetSco()){myHashRender.put(TextToSpeech.Engine.KEY_PARAM_STREAM, String.valueOf(AudioManager.STREAM_VOICE_CALL));}mTts.speak(text, TextToSpeech.QUEUE_FLUSH, myHashRender);
}

该BluetoothHeadsetUtils类复制到您的项目。

import java.util.List;import android.annotation.SuppressLint;
import android.bluetooth.BluetoothAdapter;
import android.bluetooth.BluetoothClass;
import android.bluetooth.BluetoothDevice;
import android.bluetooth.BluetoothHeadset;
import android.bluetooth.BluetoothProfile;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.media.AudioManager;
import android.os.Build;
import android.os.CountDownTimer;
import android.util.Log;/*** This is a utility to detect bluetooth headset connection and establish audio connection* for android API >= 8. This includes a work around for API < 11 to detect already connected headset* before the application starts. This work around would only fails if Sco audio* connection is accepted but the connected device is not a headset.* * @author Hoan Nguyen**/
public abstract class BluetoothHeadsetUtils
{private Context mContext;private BluetoothAdapter mBluetoothAdapter;private BluetoothHeadset mBluetoothHeadset;private BluetoothDevice mConnectedHeadset;private AudioManager mAudioManager;private boolean mIsCountDownOn;private boolean mIsStarting;private boolean mIsOnHeadsetSco;private boolean mIsStarted;private static final String TAG = "BluetoothHeadsetUtils"; //$NON-NLS-1$/*** Constructor* @param context*/public BluetoothHeadsetUtils(Context context){mContext = context;mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();mAudioManager = (AudioManager) mContext.getSystemService(Context.AUDIO_SERVICE);}/*** Call this to start BluetoothHeadsetUtils functionalities.* @return The return value of startBluetooth() or startBluetooth11()*/public boolean start(){if (!mIsStarted){mIsStarted = true;if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){mIsStarted = startBluetooth();}else{mIsStarted = startBluetooth11();}}return mIsStarted;}/*** Should call this on onResume or onDestroy.* Unregister broadcast receivers and stop Sco audio connection* and cancel count down.*/public void stop(){if (mIsStarted){mIsStarted = false;if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB){stopBluetooth();}else{stopBluetooth11();}}}/*** * @return true if audio is connected through headset.*/public boolean isOnHeadsetSco(){return mIsOnHeadsetSco;}public abstract void onHeadsetDisconnected();public abstract void onHeadsetConnected();public abstract void onScoAudioDisconnected();public abstract void onScoAudioConnected();/*** Register for bluetooth headset connection states and Sco audio states.* Try to connect to bluetooth headset audio by calling startBluetoothSco(). * This is a work around for API < 11 to detect if a headset is connected before * the application starts.* * The official documentation for startBluetoothSco() states* * "This method can be used by applications wanting to send and received audio to/from * a bluetooth SCO headset while the phone is not in call."* * Does this mean that startBluetoothSco() would fail if the connected bluetooth device* is not a headset?* * Thus if a call to startBluetoothSco() is successful, i.e mBroadcastReceiver will receive* an ACTION_SCO_AUDIO_STATE_CHANGED with intent extra SCO_AUDIO_STATE_CONNECTED, then* we assume that a headset is connected.* * @return false if device does not support bluetooth or current platform does not supports*    use of SCO for off call.*/@SuppressWarnings("deprecation")private boolean startBluetooth(){Log.d(TAG, "startBluetooth"); //$NON-NLS-1$// Device support bluetoothif (mBluetoothAdapter != null){  if (mAudioManager.isBluetoothScoAvailableOffCall()){mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(BluetoothDevice.ACTION_ACL_CONNECTED));mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECTED));mContext.registerReceiver(mBroadcastReceiver, new IntentFilter(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED));// Need to set audio mode to MODE_IN_CALL for call to startBluetoothSco() to succeed.mAudioManager.setMode(AudioManager.MODE_IN_CALL);mIsCountDownOn = true;// mCountDown repeatedly tries to start bluetooth Sco audio connection.mCountDown.start();// need for audio sco, see mBroadcastReceivermIsStarting = true;return true;}}return false;}/*** Register a headset profile listener* @return false if device does not support bluetooth or current platform does not supports*     use of SCO for off call or error in getting profile proxy.*/@TargetApi(Build.VERSION_CODES.HONEYCOMB)private boolean startBluetooth11(){Log.d(TAG, "startBluetooth11"); //$NON-NLS-1$// Device support bluetoothif (mBluetoothAdapter != null){if (mAudioManager.isBluetoothScoAvailableOffCall()){// All the detection and audio connection are done in mHeadsetProfileListenerif (mBluetoothAdapter.getProfileProxy(mContext, mHeadsetProfileListener, BluetoothProfile.HEADSET)){return true;}}}return false;}/*** API < 11* Unregister broadcast receivers and stop Sco audio connection* and cancel count down.*/private void stopBluetooth(){Log.d(TAG, "stopBluetooth"); //$NON-NLS-1$if (mIsCountDownOn){mIsCountDownOn = false;mCountDown.cancel();}// Need to stop Sco audio connection here when the app// change orientation or close with headset still turns on.mContext.unregisterReceiver(mBroadcastReceiver);mAudioManager.stopBluetoothSco();mAudioManager.setMode(AudioManager.MODE_NORMAL);}/*** API >= 11* Unregister broadcast receivers and stop Sco audio connection* and cancel count down.*/@TargetApi(Build.VERSION_CODES.HONEYCOMB)protected void stopBluetooth11(){Log.d(TAG, "stopBluetooth11"); //$NON-NLS-1$if (mIsCountDownOn){mIsCountDownOn = false;mCountDown11.cancel();}if (mBluetoothHeadset != null){// Need to call stopVoiceRecognition here when the app// change orientation or close with headset still turns on.mBluetoothHeadset.stopVoiceRecognition(mConnectedHeadset);mContext.unregisterReceiver(mHeadsetBroadcastReceiver);mBluetoothAdapter.closeProfileProxy(BluetoothProfile.HEADSET, mBluetoothHeadset);mBluetoothHeadset = null;}}/*** Broadcast receiver for API < 11* Handle headset and Sco audio connection states.*/private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver(){@SuppressWarnings({"deprecation", "synthetic-access"})@Overridepublic void onReceive(Context context, Intent intent){String action = intent.getAction();if (action.equals(BluetoothDevice.ACTION_ACL_CONNECTED)){  mConnectedHeadset = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);BluetoothClass bluetoothClass = mConnectedHeadset.getBluetoothClass();if (bluetoothClass != null){// Check if device is a headset. Besides the 2 below, are there other // device classes also qualified as headset?int deviceClass = bluetoothClass.getDeviceClass();if (deviceClass == BluetoothClass.Device.AUDIO_VIDEO_HANDSFREE || deviceClass == BluetoothClass.Device.AUDIO_VIDEO_WEARABLE_HEADSET){// start bluetooth Sco audio connection.// Calling startBluetoothSco() always returns faIL here, // that why a count down timer is implemented to call// startBluetoothSco() in the onTick.mAudioManager.setMode(AudioManager.MODE_IN_CALL);mIsCountDownOn = true;mCountDown.start();// override this if you want to do other thing when the device is connected.onHeadsetConnected();}}Log.d(TAG, mConnectedHeadset.getName() + " connected"); //$NON-NLS-1$}else if (action.equals(BluetoothDevice.ACTION_ACL_DISCONNECTED)){Log.d(TAG, "Headset disconnected"); //$NON-NLS-1$if (mIsCountDownOn){mIsCountDownOn = false;mCountDown.cancel();}mAudioManager.setMode(AudioManager.MODE_NORMAL);// override this if you want to do other thing when the device is disconnected.onHeadsetDisconnected();}else if (action.equals(AudioManager.ACTION_SCO_AUDIO_STATE_CHANGED)){int state = intent.getIntExtra(AudioManager.EXTRA_SCO_AUDIO_STATE, AudioManager.SCO_AUDIO_STATE_ERROR);if (state == AudioManager.SCO_AUDIO_STATE_CONNECTED){mIsOnHeadsetSco = true;if (mIsStarting){// When the device is connected before the application starts,// ACTION_ACL_CONNECTED will not be received, so call onHeadsetConnected heremIsStarting = false;onHeadsetConnected();}if (mIsCountDownOn){mIsCountDownOn = false;mCountDown.cancel();}// override this if you want to do other thing when Sco audio is connected.onScoAudioConnected();Log.d(TAG, "Sco connected"); //$NON-NLS-1$}else if (state == AudioManager.SCO_AUDIO_STATE_DISCONNECTED){Log.d(TAG, "Sco disconnected"); //$NON-NLS-1$// Always receive SCO_AUDIO_STATE_DISCONNECTED on call to startBluetooth()// which at that stage we do not want to do anything. Thus the if condition.if (!mIsStarting){mIsOnHeadsetSco = false;// Need to call stopBluetoothSco(), otherwise startBluetoothSco()// will not be successful.mAudioManager.stopBluetoothSco();// override this if you want to do other thing when Sco audio is disconnected.onScoAudioDisconnected();} }}}};/*** API < 11* Try to connect to audio headset in onTick.*/private CountDownTimer mCountDown = new CountDownTimer(10000, 1000){@SuppressWarnings("synthetic-access")@Overridepublic void onTick(long millisUntilFinished){// When this call is successful, this count down timer will be canceled.mAudioManager.startBluetoothSco();Log.d(TAG, "\nonTick start bluetooth Sco"); //$NON-NLS-1$}@SuppressWarnings("synthetic-access")@Overridepublic void onFinish(){// Calls to startBluetoothSco() in onStick are not successful.// Should implement something to inform user of this failuremIsCountDownOn = false;mAudioManager.setMode(AudioManager.MODE_NORMAL);Log.d(TAG, "\nonFinish fail to connect to headset audio"); //$NON-NLS-1$}};/*** API >= 11* Check for already connected headset and if so start audio connection.* Register for broadcast of headset and Sco audio connection states.*/private BluetoothProfile.ServiceListener mHeadsetProfileListener = new BluetoothProfile.ServiceListener(){/*** This method is never called, even when we closeProfileProxy on onPause.* When or will it ever be called???*/@Overridepublic void onServiceDisconnected(int profile){Log.d(TAG, "Profile listener onServiceDisconnected"); //$NON-NLS-1$stopBluetooth11();}@SuppressWarnings("synthetic-access")@TargetApi(Build.VERSION_CODES.HONEYCOMB)@Overridepublic void onServiceConnected(int profile, BluetoothProfile proxy){Log.d(TAG, "Profile listener onServiceConnected"); //$NON-NLS-1$// mBluetoothHeadset is just a headset profile, // it does not represent a headset device.mBluetoothHeadset = (BluetoothHeadset) proxy;// If a headset is connected before this application starts,// ACTION_CONNECTION_STATE_CHANGED will not be broadcast. // So we need to check for already connected headset.List<BluetoothDevice> devices = mBluetoothHeadset.getConnectedDevices();if (devices.size() > 0){// Only one headset can be connected at a time, // so the connected headset is at index 0.mConnectedHeadset = devices.get(0);onHeadsetConnected();// Should not need count down timer, but just in case.// See comment below in mHeadsetBroadcastReceiver onReceive()mIsCountDownOn = true;mCountDown11.start();Log.d(TAG, "Start count down"); //$NON-NLS-1$}// During the active life time of the app, a user may turn on and off the headset.// So register for broadcast of connection states.mContext.registerReceiver(mHeadsetBroadcastReceiver, new IntentFilter(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED));// Calling startVoiceRecognition does not result in immediate audio connection.// So register for broadcast of audio connection states. This broadcast will// only be sent if startVoiceRecognition returns true.mContext.registerReceiver(mHeadsetBroadcastReceiver, new IntentFilter(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED));}};/*** API >= 11* Handle headset and Sco audio connection states.*/private BroadcastReceiver mHeadsetBroadcastReceiver = new BroadcastReceiver(){@SuppressWarnings("synthetic-access")@TargetApi(Build.VERSION_CODES.HONEYCOMB)@Overridepublic void onReceive(Context context, Intent intent){String action = intent.getAction();int state;if (action.equals(BluetoothHeadset.ACTION_CONNECTION_STATE_CHANGED)){state = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, BluetoothHeadset.STATE_DISCONNECTED);Log.d(TAG, "\nAction = " + action + "\nState = " + state); //$NON-NLS-1$ //$NON-NLS-2$if (state == BluetoothHeadset.STATE_CONNECTED){mConnectedHeadset = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);// Calling startVoiceRecognition always returns false here, // that why a count down timer is implemented to call// startVoiceRecognition in the onTick.mIsCountDownOn = true;mCountDown11.start();// override this if you want to do other thing when the device is connected.onHeadsetConnected();Log.d(TAG, "Start count down"); //$NON-NLS-1$}else if (state == BluetoothHeadset.STATE_DISCONNECTED){// Calling stopVoiceRecognition always returns false here// as it should since the headset is no longer connected.if (mIsCountDownOn){mIsCountDownOn = false;mCountDown11.cancel();}mConnectedHeadset = null;// override this if you want to do other thing when the device is disconnected.onHeadsetDisconnected();Log.d(TAG, "Headset disconnected"); //$NON-NLS-1$}}else // audio{state = intent.getIntExtra(BluetoothHeadset.EXTRA_STATE, BluetoothHeadset.STATE_AUDIO_DISCONNECTED);Log.d(TAG, "\nAction = " + action + "\nState = " + state); //$NON-NLS-1$ //$NON-NLS-2$if (state == BluetoothHeadset.STATE_AUDIO_CONNECTED){Log.d(TAG, "\nHeadset audio connected"); //$NON-NLS-1$mIsOnHeadsetSco = true;if (mIsCountDownOn){mIsCountDownOn = false;mCountDown11.cancel();}// override this if you want to do other thing when headset audio is connected.onScoAudioConnected();}else if (state == BluetoothHeadset.STATE_AUDIO_DISCONNECTED){mIsOnHeadsetSco = false;// The headset audio is disconnected, but calling// stopVoiceRecognition always returns true here.mBluetoothHeadset.stopVoiceRecognition(mConnectedHeadset);// override this if you want to do other thing when headset audio is disconnected.onScoAudioDisconnected();Log.d(TAG, "Headset audio disconnected"); //$NON-NLS-1$}} }};/*** API >= 11* Try to connect to audio headset in onTick.*/private CountDownTimer mCountDown11 = new CountDownTimer(10000, 1000){@TargetApi(Build.VERSION_CODES.HONEYCOMB)@SuppressWarnings("synthetic-access")@Overridepublic void onTick(long millisUntilFinished){// First stick calls always returns false. The second stick// always returns true if the countDownInterval is set to 1000.// It is somewhere in between 500 to a 1000.mBluetoothHeadset.startVoiceRecognition(mConnectedHeadset);Log.d(TAG, "onTick startVoiceRecognition"); //$NON-NLS-1$}@SuppressWarnings("synthetic-access")@Overridepublic void onFinish(){// Calls to startVoiceRecognition in onStick are not successful.// Should implement something to inform user of this failuremIsCountDownOn = false;Log.d(TAG, "\nonFinish fail to connect to headset audio"); //$NON-NLS-1$}};} 

(2013年4月30日)编辑更改为@TargetApi(Build.VERSION_CODES.HONEYCOMB)必要时。如果你有问题,java.lang.NoClassDefFoundError的API,8或9,只是删除所有的API>=11码。该startBluetoothSco()API适用于所有版本。 +

2.  尽管蓝牙耳机配对并连接到手机音频配置文件(HF / HS),实际的音频连接(SCO)当呼叫才成立和接受。 为你的应用VR从蓝牙耳机接收语音输入应用程序将不得不建立上海合作组织到VR耳机触发输入, 你需要以下- isBluetoothScoAvailableOffCall检查,如果平台支持此功能, startBluetoothSco和stopBluetoothSco启动上海合作组织的耳机。 +

3.  我认为,所有你必须改变背面的音频设置为您的应用程序。 如果你推杆以下引脚当你想接收,并通过蓝牙从耳机发出的声音。

 AudioManager audioManager;audioManager = (AudioManager) getSystemService(AUDIO_SERVICE);audioManager.setMode(AudioManager.MODE_IN_COMMUNICATION);
audioManager.startBluetoothSco();
audioManager.setBluetoothScoOn(true);

不要忘记恢复以下列方式在手机上正常的设置当你的蓝牙。

audioManager.setMode(AudioManager.MODE_NORMAL);
audioManager.stopBluetoothSco();
audioManager.setBluetoothScoOn(false);

有需要的权限如下:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />

这很容易! +

4.  startBluetoothSco需要长时间来建立,也就是如果你需要它的语音控制的问题。 有没有快速的方法来 蓝牙 mic来听录音,然后听完之后把它关掉? 如果连接的是对整个那么它是不可能通过流支持A2DP的音频。 密封式的,理想化的世界: 通过支持A2DP八月音频。当它开始监听,SCO蓝牙mic。任何回应又是支持A2DP。 事实上,如果它已经连接-你可以在飞行中通过改变流切换到流调用? DM跳,有没有明显的延迟? +

Android RecognizerIntent与蓝牙耳机相关推荐

  1. 蓝牙耳机按键事件linux,【记录】Android监听蓝牙耳机的按键事件

    Android监听蓝牙耳机的按键事件 一.本文测试环境: 1.使用Dacom M10蓝牙耳机 2.成功监测到"电话键"(音量键没有监测到) 3.参考资料 4.参考源码 二.一些说明 ...

  2. android 切换左右蓝牙耳机麦克及播放

    android 切换左右蓝牙耳机麦克及播放 android 切换左右蓝牙耳机麦克录音及播放 首先,添加蓝牙权限 uses-permission android:name="android.p ...

  3. 用Android平板模拟蓝牙耳机,与手机连接,实现接听与拨打电话-预研

    用Android平板模拟蓝牙耳机,与手机连接,实现接听与拨打电话 结论: 没找到可以用的方案.据说要蓝牙协议支持.普通手机.平板做不了. 正常蓝牙打电话时,手机是实现了蓝牙协议的AG端,耳机是HF端, ...

  4. android wear听音乐,用户反映Android Wear影响蓝牙耳机的音质

    Android Wear智能手表让查看手机通知变得更加容易,但是最近却有用户反映,这类设备对于蓝牙音频设备的工作可能会产生负面的影响. 根据Reddit论坛中的一位用户反映,他平时使用的三星Galax ...

  5. Android APP通过蓝牙耳机录音可行性分析

    1 蓝牙的两种类型 部署最为普遍的两种规格为蓝牙基础率/增强数据率 (BR/EDR)(采用版本为 2.0/2.1)和低耗能 (LE) 蓝牙(采用版本为 4.0/4.1/4.2). 存在哪些差异? 蓝牙 ...

  6. android蓝牙连接耳机分析,如何在android中获取蓝牙耳机设备的信息(特别是耳机设备名称)...

    我终于解决了这个问题 . 以前我从"BluetoothAdpter"类获得了所有绑定设备的"getBondedDevices()"方法 . 但我通过使用&quo ...

  7. android 蓝牙耳机音量,android – 如何使用蓝牙耳机录制声音

    olivierg基本上是对的(AudioSource仍然可以是MIC),一些基本的代码将如下所示: am = (AudioManager) getSystemService(Context.AUDIO ...

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

    第一次在csdn写博客,在此把自己折腾了两三天的一个问题的解决过程记录一下. 背景:本人负责公司android平台的app开发,最近要开发一个语音助手类的app,类似于灵犀语音助手.虫洞语音助手等.其 ...

  9. Android 蓝牙耳机 语音输入与播放

    Android 蓝牙耳机 语音输入与播放 原以为手机连上蓝牙耳机就能录入语音信号,too young to simple. 经过一番搜寻与折腾,找到两种方式: AudioManager.startBl ...

最新文章

  1. Ansible playbook 备份Cisco ios 配置
  2. Scott Mitchell的ASP.NET2.0数据指南中文版索引
  3. qm'l 获取屏幕分辨率
  4. 单链表建立(头插法,头插法,用数组),求长,插入,删除,输出,释放(递归释放和循环释放),归并(递增和递减)
  5. 计算机系统集成项目的管理及应用
  6. 行走方案问题(动态规划实现)
  7. ITK:使用Viola Wells互信息执行多模式注册
  8. cursor: mutex S等待事件
  9. 无心剑《英语学习漫谈》
  10. Java 多线程(二)—— 线程的同步
  11. 整数快速幂(原理+模板)
  12. [UE4]暂停游戏、退出游戏、游戏输入模式
  13. Android 配置 junit 单元测试
  14. linux查看文件夹的命令是,linux查看文件夹大小命令是什么
  15. 【C语言】 C 语言 关键字分析 ( 属性关键字 | 常量关键字 | 结构体关键字 | 联合体关键字 | 枚举关键字 | 命名关键字 | 杂项关键字)
  16. 6. Lots of Parabolas
  17. java 运行 对象_java实例对象的编译时类型和运行时类型
  18. 《富爸爸,穷爸爸》思维导图
  19. tlc5620输出三角波流程图_单片机实践A/D和D/A转换的程序
  20. 『 迷你教程 』Python中的函数式编程全方法详解

热门文章

  1. DrawText的使用
  2. MySQL配置文件及参数详解
  3. java部落起源,曾氏起源-mb5ff9820fd69b3的博客-51CTO博客
  4. 计算机一级公式sumif,sum与sumif的一般用法
  5. 家长会PPT,老师必备
  6. vue-amap高德地图demo
  7. varnish 加速
  8. 联想拯救者Y7000亮度调低后屏幕黑屏
  9. 如何取消计算机待机时间,怎样设置电脑待机时间【图文教程】
  10. Linux下的图标与文件关联机制:freedesktop