`
yarin
  • 浏览: 174246 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

Android教程之Android自带的语音识别例子初探

阅读更多

版权申明:http://yarin.iteye.com/blog/453262   

语音识别技术是在Android SDK1.5中才加入的(RecognizerIntent),这里我们简单的分析一下自带的api例子,其实它就是通过一个Intent的Action动作来完成的。主要有以下两种模式:

 

ACTION_RECOGNIZE_SPEECH:一般语音识别,在这种模式下我们可以捕捉到语音的处理后的文字列。

ACTION_WEB_SEARCH:网络搜索

 

该例子同样是使用ACTION_RECOGNIZE_SPEECH模式,我们需要实现onActivityResult方法,当语音识别结束之后的回调函数。

好了,废话不多说,看下面的代码,我加入了注释,重要的本来就不多几行。

 

package com.example.android.apis.app;

import android.app.Activity;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.content.pm.ResolveInfo;
import android.os.Bundle;
import android.speech.RecognizerIntent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.List;

public class VoiceRecognition extends Activity implements OnClickListener {
    
    private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
    
    private ListView mList;

    /**
     * Called with the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.voice_recognition);

        Button speakButton = (Button) findViewById(R.id.btn_speak);
        
        mList = (ListView) findViewById(R.id.list);

        // Check to see if a recognition activity is present
        PackageManager pm = getPackageManager();
        List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
        if (activities.size() != 0)
		{
			speakButton.setOnClickListener(this);
		}
		else
		{
			speakButton.setEnabled(false);
			speakButton.setText("Recognizer not present");
		}
    }


    public void onClick(View v)
	{
		if (v.getId() == R.id.btn_speak)
		{
			startVoiceRecognitionActivity();
		}
	}

    private void startVoiceRecognitionActivity()
	{
    	//通过Intent传递语音识别的模式
		Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
		//语言模式和自由形式的语音识别
		intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
		//提示语音开始
		intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
		//开始执行我们的Intent、语音识别
		startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
	}


    //当语音结束时的回调函数onActivityResult
    @Override
	protected void onActivityResult(int requestCode, int resultCode, Intent data)
	{
		if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)
		{
			// 取得语音的字符
			ArrayList<String> matches = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
			mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, matches));
		}

		super.onActivityResult(requestCode, resultCode, data);
	}
} 

 

当然这里需要设备的支持,所以模拟器是没有效果的!

实际上在没有设备时会跑出ActivityNotFoundException异常。

 

这个例子很简单,到此为止,谢谢!

分享到:
评论
16 楼 maimode 2012-09-07  
今天试了一下,支持中文(sdk 4.1),但是需要网络支持。很可惜啊,我想使用无需网络支持也可以识别的api
15 楼 YuanYe24 2012-07-24  
我用我的华为8810和moto defy525+都不行啊,按钮是禁用的,Recognizer not present 求解答
14 楼 liang86liang 2011-08-30  
songe 写道
这里例子 我试过了  怎么都意志报错误 ActivityNotFoundException  我装在我的htc G2 中也是这个错误
我想问G2 应该会支持这个服务吧  为什么还会报错误呢  难道有其他的设置??
能回答下我吗  我MSN  sven_2009@163.com 

我在G7上测试过,也是ActivityNotFoundException,到底怎么回事呢?
13 楼 mgssnake 2010-05-29  
yarin 写道
olunx 写道
今天无意中挖到的http://code.google.com/p/eyes-free/ , 那espeak引擎读出来的英文真不是一般难听,中文还可以。


espeak是一个开源引擎,对中文支持海可以!



想问下,我在真机上测试,但是无法找到ACTION_RECOGNIZE_SPEECH这个activity,我想知道,还需要安装什么环境才能进行语音测试?谢谢
12 楼 yarin 2010-03-14  
olunx 写道
今天无意中挖到的http://code.google.com/p/eyes-free/ , 那espeak引擎读出来的英文真不是一般难听,中文还可以。


espeak是一个开源引擎,对中文支持海可以!
11 楼 olunx 2010-03-12  
今天无意中挖到的http://code.google.com/p/eyes-free/ , 那espeak引擎读出来的英文真不是一般难听,中文还可以。
10 楼 songe 2009-09-28  
这里例子 我试过了  怎么都意志报错误 ActivityNotFoundException  我装在我的htc G2 中也是这个错误
我想问G2 应该会支持这个服务吧  为什么还会报错误呢  难道有其他的设置??
能回答下我吗  我MSN  sven_2009@163.com 
9 楼 lordhong 2009-09-03  
diyisoft 写道
android上应该还没有tts吧


早就有了...
8 楼 diyisoft 2009-09-03  
android上应该还没有tts吧
7 楼 lordhong 2009-08-21  
MS Speech做得还不错的, IBM以前的viaVoice也很好, 不过google买了几家公司, 也在开发, 呵呵
6 楼 yarin 2009-08-21  
lordhong大哥说的很好哦!
微软遵照COM的标准,提供了一套Speech API来对MSTTS进行编程。好像是Delphi的库,今天简单的看了一下,有时间了在继续研究,望lordhong大哥多指点一下:
Delphi:
CoInitialize(nil);// 初始化COM 库
OleCheck(CoCreateInstance(CLASS_VTxtAuto_,nil,CLSCTX_ALL,IID_IVTxtAuto,IVTxtAutoEx));
// 创建IVTxtAuto 接口
IVTxtAutoEx.Register(' ',' ');
// 向服务器注册
IVTxtAutoEx.Set_Enabled(1);// 打开mstts
IVTxtAutoEx.Set_Speed(150);// 设置语音速度
5 楼 zx012345 2009-08-20  
这个要在连网的情况下才能使用,不然的话会提示连接失败,更遗憾的是,这个还不支持中文
4 楼 lordhong 2009-08-20  
TTS倒是有个中文包, 试了下你好世界...还不错
3 楼 sanfeng_chow 2009-08-20  
请问一下楼主需要什么设备呀。
我把这个程序装在G1上看不到效果
那个按钮是禁用的。
2 楼 yarin 2009-08-20  
lordhong 写道
不知道支不支持中文语音, 呵呵

要支持中文貌似还有点困难,有待研究!
1 楼 lordhong 2009-08-20  
不知道支不支持中文语音, 呵呵

相关推荐

    《语音识别初探》说课稿.docx

    《语音识别初探》这堂课是针对小学四年级学生设计的人工智能启蒙教育课程,主要探讨的是语音识别技术的基础知识及其在生活中应用。课程旨在激发学生对语音识别的兴趣,通过体验活动来理解语音识别的核心功能,并掌握...

    初探Android初探Android.doc

    Android是谷歌公司与2007年11月5日推出的开放手机软硬件平台,它是一个基于Linux内核的操作系统,旨在打造一个开放且统一的移动设备生态系统。开放手持装置联盟(Open Handset Alliance)由包括摩托罗拉、宏达电、...

    Android单元测试初探——Instrumentation

    学习Android有一段时间了,虽然前段时间对软件测试有了一些了解,不过接触android的单元测试却是头一次。这几天在物流大赛上也用了不少时间,所以对于android的单元测试没有太深入的研究,所以先写个基本入门吧!...

    入门--初探Android

    "入门--初探Android" Android是一个基于Linux核心(kernel)的开源手机操作系统平台。它于2007年11月5日由Google与其他33家手机制造商、手机晶片供应商、软件供应商、电信运营商所组成的开放手机联盟(Open Handset ...

    语音识别技术在智能家居系统中的应用初探.pdf

    语音识别模块主要由LD3320语音识别芯片和STC15F2K60S2单片机构成,使用SPI协议进行初始化配置,并通过CC2430芯片为核心的ZigBee模块实现数据的无线传输。上位机部分负责接收用户的语音指令,并通过C#编写的串口通信...

    三、初探Android开发-Android开发与实践

    【Android开发与实践详解】 Android开发是移动应用开发领域中的重要组成部分,主要使用Eclipse集成开发环境(IDE)进行。本章将深入探讨如何利用Eclipse创建Android应用程序,理解Android虚拟设备(AVD)的创建,...

    探索Android FrameWork底层开发视频全套

    1.初探Android 2.Android开发环境搭建与编译 3.Android编译过程分析 4.android.mk初识 5.Android.mk学习1 6.Android.mk学习2 7.Android.mk学习3 8.Android启动课程大纲 9.Android启动模式 10.init启动分析 11.走入...

    android开发揭秘PDF

    9.2 语音识别 9.3 GoogleMap 9.3.1 GoogleMap概述 9.3.2 准备工作 9.3.3 GoogleMapAPI的使用 9.3.4 定位系统 9.4 桌面组件 9.4.1 快捷方式 9.4.2 实时文件夹 9.4.3 Widget开发 9.5 账户管理 9.6 小结 第三部分 实例...

    Kotlin初探与集成Android项目

    ### Kotlin初探与集成Android项目 #### 一、了解Kotlin **Kotlin的背景:** Kotlin 是一种由 JetBrains 开发的静态类型编程语言,它最初发布于 2011 年,并且在 2017 年被 Google 宣布成为 Android 的官方开发...

    《语音识别初探》说课稿.pdf

    。。。

    Android Apk解密工程初探

    Android Apk解密工程初探

    OpenCV初探:二、Android程序示例 源代码

    在"OpenCV初探:二、Android程序示例 源代码"中,我们可以预期获得一些关于如何在Android应用中集成OpenCV的实例代码。这些源代码将帮助开发者理解如何在Android环境下设置和使用OpenCV库,从而实现各种视觉任务。 ...

    Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明

    Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明 Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明 Android中滑屏初探 ---- scrollTo 以及 scrollBy方法使用说明

    Android开发教程之桌面组件【widget】初探--千锋培训

    在Android开发中,桌面组件(Widget)是一种可以让用户在手机或平板电脑的主屏幕上直接查看和操作的应用小部件。本文将深入探讨如何在Android中创建和使用Widget,以及相关的框架类和方法。 首先,我们来看App...

    Android代码-Android_Learning_Notes

    9、Android09--Fragment初探 10、Android09--Android程序界面 11、Android11--基本布局 12、Android12--常见控件(一) 13、Android13--常见控件(二) 14、Android14--Adapter 15、Android15--ListView 16、Android16--...

    Android fragment懒加载初探

    在Android应用开发中,Fragment是Activity的一个模块化组件,它允许开发者将屏幕的不同部分独立管理。"Android fragment懒加载"是指在用户实际需要时才加载Fragment中的数据或视图,而不是在Fragment创建时立即加载...

    Android WIFI密码破解工具编写初探

    Android源码_安卓WIFI密码破解工具编写初探 本资料共包含以下附件: Android源码_安卓WIFI密码破解工具编写初探.rar

Global site tag (gtag.js) - Google Analytics