您的位置:首页 > 移动开发 > Android开发

Android学习指南之三十九:Android语音识别编程初步

2012-11-11 22:34 525 查看
语音识别是一项让人感兴趣的功能,而且它是语音搜索等功能的基础,Android开发者很有必要掌握此技术,以开发出有受人喜欢的应用。

Android中主要通过RecognizerIntent来实现语音识别,代码比较简单,但是这里要注意两个问题:

1、如果找不到设置,就会抛出异常ActivityNotFoundException,所以我们需要捕捉这个异常。

2、语音识别在模拟器上是无法测试的,因为语音识别是访问google云端数据,所以如果手机的网络没有开启,就无法实现识别声音一定要开启手机的网络,如果手机不存在语音识别功能的话,也无法启用识别!

下面是RecognizerIntentActivity中的代码:

public class RecognizerIntentActivity extends Activity {   
      
        private Button btnReconizer;   
        private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;   
        @Override  
        protected void onCreate(Bundle savedInstanceState) {   
            // TODO Auto-generated method stub   
            super.onCreate(savedInstanceState);   
            setContentView(R.layout.reconizer);   
               
            btnReconizer=(Button) this.findViewById(R.id.btnRecognizer);   
            btnReconizer.setOnClickListener(new OnClickListener() {   
                   
                @Override  
                public void onClick(View v) {   
                    // TODO Auto-generated method stub   
                    try{   
                    //通过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, "开始语音");   
                    //开始语音识别   
                    startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);   
                    }catch (Exception e) {   
                        // TODO: handle exception   
                        e.printStackTrace();   
                        Toast.makeText(getApplicationContext(), "找不到语音设备", 1).show();   
                    }   
                }   
            });   
               
        }   
           
        @Override  
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {   
            // TODO Auto-generated method stub   
            //回调获取从谷歌得到的数据    
            if(requestCode==VOICE_RECOGNITION_REQUEST_CODE && resultCode==RESULT_OK){   
                //取得语音的字符   
                ArrayList<String> results=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);   
                   
                String resultString="";   
                for(int i=0;i<results.size();i++){   
                    resultString+=results.get(i);   
                }   
                Toast.makeText(this, resultString, 1).show();   
            }   
            super.onActivityResult(requestCode, resultCode, data);   
        }   
    }
其主要原理就是将语音发送到google云端,然后云端处理,匹配相应的数据,发送到客户端。

最后不要忘记,在manifest中加入网络访问权限:

<uses-permission android:name="android.permission.INTERNET" />
运行后效果:

点击开始语音按钮,然后开始说话(这里要保证手机的网路是打开的):

正在等待云端数据。如果得到云端数据,就会通过Toast方式打印出来的。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: