安卓Android科大讯飞语音识别代码使用详解
科大讯飞的语音识别功能用在安卓代码中,我把语音识别写成了Service,然后在Fragment直接调用service服务。科大讯飞语音识别用的是带对话框的那个,直接调用科大讯飞的语音接口,代码采用链表结果集的方式获取数据。 
这个语音识别需要在官网申请APPID
本博来自:http://blog.csdn.net/zhaocundang 小波LinuxQQ463431476
测试:
自己项目采用了科大讯飞语音识别服务,报告中是这样解释的:
语音Service服务代码设计
(1)要想写好Service代码,必须了解Service的生命周期.
(2)首先启动Service服务的方法是: 
getActivity().startService(new Intent(getActivity(),VoiceService.class)); 
停止Service服务: 
getActivity().stopService(new Intent(getActivity(),VoiceService.class)); 
(3)将类继承与Service: 
public class VoiceService extends Service{ 
} 
自动重载OnBind()函数,通过OnBind()的返回值,将Service的实例返回调用者。 
(3) 调用科大讯飞语音API接口代码 
先调用手机麦克风录音: 
rd.setSampleRate(RATE.rate16k); 
调用语音API包中的语音识别对话框,将录音发送到服务器,并接受服务器返回的结果,将数据以链表数据结构的形式传过来,获取结果: 
final StringBuilder sb = new StringBuilder(); 
rd.setListener(new RecognizerDialogListener() { 
public void onResults(ArrayList result, boolean isLast) { 
for (RecognizerResult recognizerResult : result) { 
sb.append(recognizerResult.text); 
} 
} 
public void onEnd(SpeechError error) { 
} 
}); 
(4)文本语音朗读的调用: 
先是声明播放对象: 
private static SynthesizerPlayer player ; 
这里我直接封装一个朗读函数,appid是申请的应用授权id,代码如下: 
public void speak(String words){ 
player = SynthesizerPlayer.createSynthesizerPlayer(getActivity(),”appid=57527406”); 
player.playText(words, null,null); //播放文本 
}
主要的代码:
开启和关闭服务:
public void onClick(View v) {
        // TODO Auto-generated method stub
       switch(v.getId()){
            case R.id.button1:
       getActivity().startService(new Intent(getActivity(),VoiceService.class));
                break;
            case R.id.button2:
       getActivity().stopService(new Intent(getActivity(),VoiceService.class));
                break;
        }
    }  
服务中:
package zcd.voice;
import java.util.ArrayList;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;
import android.view.WindowManager;
import android.widget.Toast;
import com.iflytek.speech.RecognizerResult;
import com.iflytek.speech.SpeechConfig.RATE;
import com.iflytek.speech.SpeechError;
import com.iflytek.ui.RecognizerDialog;
import com.iflytek.ui.RecognizerDialogListener;
public class VoiceService extends Service{
    private RecognizerDialog rd;
    private   String text;
    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }
      @Override
        public void onCreate() {
            // TODO Auto-generated method stub
            super.onCreate();
          // Toast.makeText(this, "Service onCreated", Toast.LENGTH_LONG).show();
           rd = new RecognizerDialog(this ,"appid=57627d9c");
        }
      public void onStart(Intent intent, int startId) {
         //  Toast.makeText(this, " Service onStart", Toast.LENGTH_LONG).show();
           showReconigizerDialog();
        }
      private void showReconigizerDialog() {
             //sms 简单语音识别文本
             rd.setEngine("sms", null, null);
             //设置麦克风采样频率
            rd.setSampleRate(RATE.rate16k);
             final StringBuilder re = new StringBuilder();
            //设置识别后的回调结果
            rd.setListener(new RecognizerDialogListener() {
                @Override
                public void onResults(ArrayList<RecognizerResult> result, boolean isLast) {
                    for (RecognizerResult recognizerResult : result) {
                        re.append(recognizerResult.text);
                    }
                }
                @Override
                public void onEnd(SpeechError error) {
                    //识别完成
                    //R.id.txt_result.setText(sb.toString());
                     text = re.toString();
                     Toast.makeText(VoiceService.this,re.toString(), Toast.LENGTH_LONG).show();
                     sendmsg();
                }
            });
            //txt_result.setText(""); //先设置为空,等识别完成后设置内容
            rd.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ALERT); // service 中getwindowmanager 设置优先级显示对话框
            rd.show();
        }
        public  void sendmsg()
     {
          //broadcast
            // service 通过广播来发送识别结果到Voice Fragment
            Intent intent=new Intent();
            intent.putExtra("message",text);
            intent.setAction("zcd.voice");
            sendBroadcast(intent);
     }
}
Service中是无法显示对话框的,显示对话框的方式就是使用getwindow的方法,设置窗口最高优先级即可了!
安卓Android科大讯飞语音识别代码使用详解的更多相关文章
- Drawable实战解析:Android XML shape 标签使用详解(apk瘦身,减少内存好帮手)
		
Android XML shape 标签使用详解 一个android开发者肯定懂得使用 xml 定义一个 Drawable,比如定义一个 rect 或者 circle 作为一个 View 的背景. ...
 - Android Design Support Library使用详解
		
Android Design Support Library使用详解 Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的And ...
 - Android 之窗口小部件详解--App Widget
		
Android 之窗口小部件详解--App Widget 版本号 说明 作者 日期 1.0 添加App Widge介绍和示例 Sky Wang 2013/06/27 1 App ...
 - Android不规则点击区域详解
		
Android不规则点击区域详解 摘要 今天要和大家分享的是Android不规则点击区域,准确说是在视觉上不规则的图像点击响应区域分发. 其实这个问题比较简单,对于很多人来说根本不值得做为一篇博文写出 ...
 - [Android新手区] SQLite 操作详解--SQL语法
		
该文章完全摘自转自:北大青鸟[Android新手区] SQLite 操作详解--SQL语法 :http://home.bdqn.cn/thread-49363-1-1.html SQLite库可以解 ...
 - Android中Service的使用详解和注意点(LocalService)
		
Android中Service的使用详解和注意点(LocalService) 原文地址 开始,先稍稍讲一点android中Service的概念和用途吧~ Service分为本地服务(LocalServ ...
 - Android中SurfaceView的使用详解
		
Android中SurfaceView的使用详解 http://blog.csdn.net/listening_music/article/details/6860786 Android NDK开发 ...
 - 《Android群英传》读书笔记 (5) 第十一章 搭建云端服务器 + 第十二章 Android 5.X新特性详解 + 第十三章 Android实例提高
		
第十一章 搭建云端服务器 该章主要介绍了移动后端服务的概念以及Bmob的使用,比较简单,所以略过不总结. 第十三章 Android实例提高 该章主要介绍了拼图游戏和2048的小项目实例,主要是代码,所 ...
 - Android特效 五种Toast详解
		
Toast是Android中用来显示显示信息的一种机制,和Dialog不一样的是,Toast是没有焦点的,而且Toast显示的时间有限,过一定的时间就会自动消失.而且Toast主要用于向用户显示提示消 ...
 
随机推荐
- css实现文本溢出显示...
			
在网页中显示文字内容时,经常会碰到文字内容特别长的情况,那么这个时候为了使网页看起来比较美观和简洁,会对内容进行处理.下面我们就来看一看,如何使用css来对文字溢出部分增加.... 首先来看第一种情况 ...
 - mongodb全套配置
			
1,下载&安装 MongoDB 提供了centos yum安装方式. 参考:http://docs.mongodb.org/manual/tutorial/install-mongodb-on ...
 - 基于Caffe的DeepID2实现(中)
			
小喵的唠叨话:我们在上一篇博客里面,介绍了Caffe的Data层的编写.有了Data层,下一步则是如何去使用生成好的训练数据.也就是这一篇的内容. 小喵的博客:http://www.miaoerduo ...
 - 04. Web大前端时代之:HTML5+CSS3入门系列~HTML5 表单
			
Web大前端时代之:HTML5+CSS3入门系列:http://www.cnblogs.com/dunitian/p/5121725.html 一.input新增类型: 1.tel:输入类型用于应该包 ...
 - Electron安装
			
1.安装nodejs和npm 官网下载地址:https://nodejs.org/en/download/ 安装包:下载.msi 安装完成后: nodejs.npm都会安装好,path环境变量也自动设 ...
 - 应用新安全组 - 每天5分钟玩转 OpenStack(116)
			
Neutron 默认的安全组规则会禁止掉所有从外面访问 instance 的流量. 本节我们会修改安全组的配置,允许 ping 和 ssh instance.有两种方法可以达到这个目的: 1. 修改 ...
 - Hibernate中的锁机制
			
锁机制:是数据库为了保证数据的一致性<一个事务的各种操作不相互影响>而使各种共享资源在被并发访问访问变得有序所设计的一种规则,用来保证在当前用户进行操作数据的时候其他的用户不能对同一数据进 ...
 - PHP_环境配置_python脚本_2017
			
Apache配置 需要安装:VC2015 httpd-2.4.16-win32-VC14.zip VC14就是2015的环境. 又比如:php-5.6.12-Win32-VC11-x86 VC11就是 ...
 - jvm系列(二):JVM内存结构
			
JVM内存结构 所有的Java开发人员可能会遇到这样的困惑?我该为堆内存设置多大空间呢?OutOfMemoryError的异常到底涉及到运行时数据的哪块区域?该怎么解决呢?其实如果你经常解决服务器性能 ...
 - 2015游戏蛮牛——蛮牛杯第四届开发者大赛 创见VR未来开启报名
			
蛮牛杯启动了,大家开始报名! http://cup.manew.com/ 这不是一篇普通的通稿,别着急忽略它.它是一篇可以让你梦想变现的通稿! 从某一天开始,游戏蛮牛就立志要为开发者服务,我们深知这一 ...