Android 语音识别学习小记--暑期大学生博客分享大赛 - 2011 Android 成长篇

本文分享了作者一年内从新手到参与Android语音识别挑战赛的心得,通过简单Demo展示了如何使用Android SDK实现语音识别功能。作者深入浅出地介绍了语音识别的实现过程和关键代码,并分享了实际运行效果。文章旨在帮助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能够顺利成长,不断完善。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值