需求:

最近需要在项目中需要集成各家的语音识别功能。包括讯飞,Alexa以及google的语音。前面两家的都有对应的api,集成到对应的项目中比较简单,这里只介绍如果集成Google的语音在项目上,像Google Assistant一样。因为google并没有公开的语音识别的api,网上许多文章上也有对google语音接口api的分析,但是现在都不好用了,不是限制了使用次数,就是要收费。这里先简单介绍下网上的方法和Google现在公开提供的收费语音识别。

1.网上方法

参考这篇文章:http://blog.laobubu.net/archivers/google-speech-api-pt2

2.Goole提供的收费接口:

参考官方文档:https://cloud.google.com/speech/(自备梯子)

需要Google账号,前60分钟免费,之后要收钱,而且必须要绑定信用卡。。

项目介绍:

Google有一个项目叫Voice Search,这个是官方的,不收费的项目,但是这个项目不是开源的,我们利用这个项目的源代码jar包来集成Google的语音。废话不多说,直接集成。

首先新建AS项目,怎么建AS项目就不说了,大家都是明白人,而且也不是写给新手看的。我们将voice_searc.jar包导入到lib下,将所需的资源文件全部拷到res对应目录下,将manifest文件对应的全部复制(jar包和资源文件最后在我的github上自行下载),这时候注意,这个jar包就是项目Voice Search所有的源代码,用过Voice search的人应该都知道,当时唤醒Voice Search说话的时候,会有一个弹框:

我们都知道jar包中不能存放资源文件,但是我们集成语音又必须用到里面的类,这个时候,如果是在eclipse上开发的话,比较简单,eclipse里面有个叫工程依赖的概念,可以将资源文件放在外部,利用固定id,直接引用。但是Android Studio上不行,因为即使固定了id,AS会在编译期间为每个资源重新生成资源id,导致报错,资源找不到)。

解决:在app同级目录下建一个public-xml.gradle配置文件,内容如下:

  1. afterEvaluate {
  2. for (variant in android.applicationVariants) {
  3. def scope = variant.getVariantData().getScope()
  4. String mergeTaskName = scope.getMergeResourcesTask().name
  5. def mergeTask = tasks.getByName(mergeTaskName)
  6. mergeTask.doLast {
  7. copy {
  8. int i=0
  9. from(android.sourceSets.main.res.srcDirs) {
  10. include 'values/public.xml'
  11. rename 'public.xml', (i++ == 0? "public.xml": "public_${i}.xml")
  12. }
  13. into(mergeTask.outputDir)
  14. }
  15. }
  16. }
  17. }

然后再app的gradle的开头添加:

  1. apply from: 'public-xml.gradle'

rebuild即可。

使用:

jar包和资源文件准备好之后,就是使用:

public class MainActivity extends AppCompatActivity {private RecognitionController mController;private RecognitionListener mCallback;private VoiceSearchLogger mLogger;private Button start, stop;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);start = (Button) findViewById(R.id.start_btn);stop = (Button) findViewById(R.id.stop_btn);VoiceSearchContainer localVoiceSearchContainer = VoiceSearchApplication.getContainer(this);this.mController = localVoiceSearchContainer.createRecognitionController();GservicesHelper mGservicesHelper = localVoiceSearchContainer.getGservicesHelper();this.mCallback = new VoiceSearchRecognitionListener();this.mLogger = localVoiceSearchContainer.getVoiceSearchLogger();final Intent mIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);mIntent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);mIntent.putExtra("fullRecognitionResultsRequest", true);mIntent.putExtra("calling_package", "android");mIntent.putExtra("contact_auth", true);mIntent.putExtra("useLocation", true);mIntent.putExtra("ptt", 0);mIntent.putExtra("android.speech.extras.SPEECH_INPUT_COMPLETE_SILENCE_LENGTH_MILLIS", mGservicesHelper.getEndpointerCompleteSilenceMillis());mIntent.putExtra("android.speech.extras.SPEECH_INPUT_POSSIBLY_COMPLETE_SILENCE_LENGTH_MILLIS", mGservicesHelper.getEndpointerPossiblyCompleteSilenceMillis());start.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mController.onStartListening(mIntent, mCallback);}});stop.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {mController.onStopListening(mCallback);}});}private class VoiceSearchRecognitionListener implements RecognitionListener {private VoiceSearchRecognitionListener() {}public void onBeginningOfSpeech() {Log.i("xyz", "---------->onBeginningOfSpeech");}public void onBufferReceived(byte[] paramArrayOfByte) {}public void onEndOfSpeech() {Log.i("xyz", "---------->onEndOfSpeech");}public void onError(int paramInt) {Log.i("xyz", "---------->onError:" + paramInt);}public void onEvent(int paramInt, Bundle paramBundle) {}public void onPartialResults(Bundle paramBundle) {Log.i("xyz", "---------->onPartialResults");Log.i("xyz", "onPartialResults:" + paramBundle.toString());}public void onReadyForSpeech(Bundle paramBundle) {Log.i("xyz", "---------->onReadyForSpeech");}public void onResults(Bundle paramBundle) {Log.i("xyz", "---------->onResults");Log.i("xyz", "onResults:" + paramBundle.toString());ArrayList<VoiceAction> localArrayList = paramBundle.getParcelableArrayList("fullRecognitionResults");if (localArrayList != null && localArrayList.size() > 0) {String str = localArrayList.get(0).toString();Log.i("xyz", "-------------->result:" + str);}else {Log.i("xyz", "-------------->result:null");}}public void onRmsChanged(float paramFloat) {Log.i("xyz", "---------->onRmsChanged:" + paramFloat);}}
}

在Android项目上集成Google语音(不使用手机自带引擎)相关推荐

  1. 在android项目上集成libyuv库以及使用libyuv库完成camera的缩放,旋转,翻转,裁剪操作

    目录 一.下拉google官方的libyuv库代码 二.在android项目中集成libyuv库 1.环境配置 2.拷贝libyuv源码文件 ​编辑3.配置cmake libyuv相关的链接编译等 三 ...

  2. Android平台上集成海康SDK(二)

    Android平台上集成海康SDK 以上是我之前写的一篇Android平台上集成海康SDK的文章,其中对于Android平台上集成海康SDK.基于海康SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  3. 在Android模拟器上安装Google Play

    问题 我想在模拟器上安装Google Play. 问题是网上没有指南可以准确地告诉我该怎么做. 我不知道为什么,似乎他们使用的是旧版Android Market(3版之前的版本),或者至少有人展示了一 ...

  4. Android项目上传到GItHub

    Android项目上传到GitHub管理_Mac 步骤 1.创建新的Anroid项目 2.GitHub创建新的代码仓库 3.GitHub远程版本库克隆到本地 3.1.进入项目文件夹 3.2把远程版本库 ...

  5. Android平台上集成大华SDK(二)

    Android平台上集成大华SDK 以上是我之前写的一篇Android平台上集成大华SDK的文章,其中对于Android平台上集成大华SDK.基于大华SDK进行二次开发基本上进行了详细地介绍. 这篇文 ...

  6. Android 开发中调用google语音接口

    最近项目开发中需求中要采用多种的输入方式,于是乎想起google的语音搜索做了一下尝试,做了一个简单的语音识别的demo,总结起来,大致的过程如下: 一.检查Androird手机上是否装上了googl ...

  7. 在Android App中集成Google登录

    技术文章 来源:码农网 发布:2016-09-19 浏览:194 摘要:今天,几乎所有的web和移动app都自带谷歌和Facebook登录,这对app开发者和用户来说是一个非常有用的功能,因为几乎每个 ...

  8. Android项目中集成华为账号登录、支付

    最近项目中集成了华为账号登录与支付的功能,把踩过的坑和过程记录下来. 先看下支付效果图: 支付价格0.01请忽略,因为这是为了测试用的. 刚开始接到这个项目的时候我很奇怪,为什么要集成华为支付呢,原有 ...

  9. Android项目如何集成ZXing二维码扫描功能

    最近的项目有二维码扫描跳转网页的需求,就是利用手机摄像头,扫描并解析二维码内容,内容由生成二维码的时候定义,我项目现在的需求就是一个包含了网址的二维码,网上有生成二维码的工具,也可以自己开发一个. 搜 ...

最新文章

  1. orale的tnsping与TCP/IP的ping命令的比较
  2. 计算机网络 tcp 阻塞,读书笔记:计算机网络第7章:阻塞控制
  3. python树结构_Python-简单的树结构实现
  4. Mysql储存过程2:变量定义与参数传递
  5. 在.NET中调用存储过程
  6. 亚马逊被爆内部员工卖数据改差评,中国区尤为严重!
  7. 一些不错的理论[转载]
  8. 『WPF』DataGrid的使用
  9. A股管家股票自动交易软件系统,功能完善强大
  10. dirent struct_file属性读取 Struct dirent struct stat
  11. 三种 Bitmap 之 Java BitSet
  12. phalapi可以依赖注入么_3.2 PhalApi 配置
  13. 新闻管理系统(四)封装news表相关
  14. 网络通信TCP/UDP
  15. 金蝶插件常用引用dl
  16. 报表数据填报中的合法性校验
  17. 欢场春梦破碎夜 A股暴跌哀鸿遍野 未来投资机会何在?
  18. 商品规格数据结构与商品表结构分析
  19. 四则运算web版需求规格说明书
  20. NFC在Android平台的架构与移植

热门文章

  1. 从互联网汽车到国企改革:砸钱还是自己干?
  2. MySQL ID排序乱了的解决办法
  3. 专家呼吁禁止杀手机器人
  4. 阿里云服务器上安装nginx
  5. 对接企业微信4:接收消息与事件
  6. Redis 热点问题产生,解决方案有哪些?
  7. NUIST找工作小玩具
  8. Thinkcmf子栏目获取父级栏目所有子栏目列表
  9. 理解 operator=
  10. 名人堂:网络缔造者—互联网之父VintonG.Cerf