Android(安卓)语音识别学习小记--暑期大学生博客分享大赛 - 2011 Android(安卓)成长篇
时间过得真快,不知不觉中接触android已经一年了, 仿照Demo各种小程序也写了有一二十个了,我感觉谷歌很为开发者着想,把android应用开发尽可能的简化,提供各种功能API函数供我们调用,使我们能够轻松的编写出好玩实用的应用。期待已久的android挑战赛终于迎来了第二届,前些日子看到这条新闻时心里非常高兴,第一届举办时,我还什么也不会,一年之后,终于有机会参加了。
我就写一篇关于学习android语音识别的博文吧,因为前些天刚刚看见关于android语音识别的文章,也就学习了一下那个最常见的小Demo。先贴出带注释的代码吧:
//main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<Button android:text="开始说话"
android:id="@+id/btn_speak"
android:layout_gravity="center_horizontal"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></Button>
<ListView android:id="@+id/list"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
></ListView>
</LinearLayout>
//Sound_like.java
package com.jiadebin.sound;
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 sound_like extends Activity implements OnClickListener{
private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
private Button btn_speak;
private ListView lv_mylist;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
/*从main.xml文件设置我们的界面*/
setContentView(R.layout.main);
/*根据按钮的id获取按钮*/
btn_speak = (Button) findViewById(R.id.btn_speak);
/*根据ListView的id获取mList*/
lv_mylist = (ListView) findViewById(R.id.list);
/*查看语音识别的activity是否已经准备好*/
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
if (activities.size()!=0) /*如果activity已经准备好,则设置按钮的监听器*/
{
btn_speak.setOnClickListener(this);
}
else /*否则,显示提示文本*/
{
btn_speak.setText("出错");
}
}
/*处理按钮事件的函数*/
public void onClick(View v)
{
if (v.getId() == R.id.btn_speak)
{
startVoiceRecognitionActivity();
}
}
/*新建一个intent来启动语音识别的activity*/
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");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);
}
/*处理识别结果*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK)
{
/*用识别结果的字符串填充lv_mylist,以显示识别结果*/
ArrayList<String> matches = data.getStringArrayListExtra(
RecognizerIntent.EXTRA_RESULTS);
lv_mylist.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
matches));
}
/*调用一下父类方法*/
super.onActivityResult(requestCode, resultCode, data);
}
}
这个小Demo的结构很简单,只有一个Button和一个ListView,首先需要让我们的Activity实现OnClickListener接口,以便为按钮添加点击事件,然后就是一般程序的流程:加载界面布局文件,然后利用findViewById定位控件资源,下一步就是检查语音识别的activity是否准备好,如果没有准备好就直接在按钮上提示给用户,如果准备好了就为按钮设置监听器,监听器的回调函数就是调用启动语音识别活动的函数,函数里新建一个Intent对象,然后设置一些额外数据,接下来传递请求码启动该意图并等待接收返回结果。最后重写activity里的onActivityResult函数,以便处理返回的结果,如果请求码一致并且resulecode为OK的话说明识别正常,我们要做的就是得到识别结果的字符串,并加到ListView里,程序到此结束。
程序的运行截图如下:
图1 程序图标界面
图2 进入程序
图3 说话(我说的以后)
图4 成功识别
程序感悟:以前一直以为语音识别这个东西对于应用开发人员来说是很高端很复杂的技术,但是学习了这个语音识别Demo之后,我深切感受到Google为简化开发人员的工作而做的努力,我们只需写这么少的代码,就可以在我们自己的应用里实现基本的语音识别功能,这是令我非常惊讶也是非常欣慰的,怪不得android可以吸引全世界那么多开发者!
现在的我,还是一个android菜鸟选手,但是我会继续努力,继续练习,我也会参加这届挑战赛,我相信我会在学习中成长,我相信天道酬勤,欢迎对android感兴趣的童鞋和我一起交流经验,最后预祝android能够顺利成长,不断完善。
更多相关文章
- 改变Android按钮背景颜色的高效方法
- Android开发实践:利用ProGuard进行代码混淆
- Android下实现非启动界面Wifi连接
- Android(安卓)Studio如何提示函数用法
- Android(安卓)Studio怎样提示函数使用方法
- Android应用开发笔记(13): Android移动应用界面的模板化设计
- Android(安卓)So简单加固
- Android移动应用界面的模板化设计
- 箭头函数的基础使用