Android语音识别--RecognizerInten…

来源:互联网 发布:软件在 sql查密码 编辑:程序博客网 时间:2024/05/16 05:21
在网上找了一篇关于Android语音识别的文章,自己慢慢研究。  
     Android中主要通过RecognizerIntent来实现语音识别,其实代码比较简单,但是如果找不到设置,就会抛出异常ActivityNotFoundException,所以我们需要捕捉这个异常。而且语音识别在模拟器上是无法测试的,因为语音识别是访问google云端数据,所以如果手机的网络没有开启,就无法实现识别声音的!一定要开启手机的网络,如果手机不存在语音识别功能的话,也是无法启用识别!
RecognizerIntent的一些常量:


我们只需要通过Intent来传递一个动作以及一些属性,然后通过startActivityForResult来开始语音,代码如下:

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);

下面是RecognizerIntentActivity中的代码:01public classRecognizerIntentActivity extendsActivity {
02 
03    privateButton btnReconizer;
04    privatestatic final intVOICE_RECOGNITION_REQUEST_CODE =1234;
05    @Override
06    protectedvoid onCreate(Bundle savedInstanceState){
07        //TODO Auto-generated method stub
08        super.onCreate(savedInstanceState);
09        setContentView(R.layout.reconizer);
10         
11        btnReconizer=(Button)this.findViewById(R.id.btnRecognizer);
12        btnReconizer.setOnClickListener(newOnClickListener() {
13             
14            @Override
15            publicvoid onClick(View v) {
16                //TODO Auto-generated method stub
17                try{
18                //通过Intent传递语音识别的模式,开启语音
19                Intentintent=newIntent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
20                //语言模式和自由模式的语音识别
21                intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
22                //提示语音开始
23                intent.putExtra(RecognizerIntent.EXTRA_PROMPT,"开始语音");
24                //开始语音识别
25                startActivityForResult(intent,VOICE_RECOGNITION_REQUEST_CODE);
26                }catch(Exception e) {
27                    //TODO: handle exception
28                    e.printStackTrace();
29                    Toast.makeText(getApplicationContext(),"找不到语音设备",1).show();
30                }
31            }
32        });
33         
34    }
35     
36    @Override
37    protectedvoid onActivityResult(intrequestCode, int resultCode, Intentdata) {
38        //TODO Auto-generated method stub
39        //回调获取从谷歌得到的数据
40        if(requestCode==VOICE_RECOGNITION_REQUEST_CODE&&resultCode==RESULT_OK){
41            //取得语音的字符
42            ArrayList<String>results=data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
43             
44            StringresultString="";
45            for(inti=0;i<results.size();i++){
46                resultString+=results.get(i);
47            }
48            Toast.makeText(this,resultString, 1).show();
49        }
50        super.onActivityResult(requestCode,resultCode, data);
51    }
52}其主要原理就是将语音发送到google云端,然后云端处理,匹配相应的数据,发送到客户端。
最后不要忘记,在manifest中加入网络访问权限:
<uses-permissionandroid:name="android.permission.INTERNET" />

运行后效果:

  



另一个代码:
  1. public class Activity01 extends Activity 
  2.  private static final int VOICE_RECOGNITION_REQUEST_CODE 4321
  3.  private ListView mList; 
  4. public void onCreate(Bundle savedInstanceState) 
  5.     super.onCreate(savedInstanceState); 
  6.     setContentView(R.layout.main); 
  7.     mList (ListView) findViewById(R.id.ListView01); 
  8.     Button button (Button) findViewById(R.id.Button01);  
  9.     button.setOnClickListener(new View.OnClickListener()  
  10.                   
  11.         @Override           
  12.         public void onClick(View v) 
  13.         
  14.             try 
  15.             
  16.                 //通过Intent传递语音识别的模式,开启语音 
  17.                 Intent intent new Intent 
  18.                 (RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
  19.                 //语言模式和自由形式的语音识别 
  20.                 intent.putExtra(RecognizerIntent.EXTRA_  
  21.                                 LANGUAGE_MODEL,RecognizerIntent. 
  22.                                 LANGUAGE_MODEL_FREE_FORM); 
  23.  
  24.                 //提示语音开始 
  25.                 intent.putExtra(RecognizerIntent.EXTRA_ 
  26.                                 PROMPT,"开始语音"); 
  27.                 //开始执行我们的Intent、语音识别 
  28.                 startActivityForResult(intent,  
  29.                 VOICE_RECOGNITION_REQUEST_CODE); 
  30.             
  31.             catch (ActivityNotFoundExceptioe) 
  32.             
  33.                 //找不到语音设备装置 
  34.                 Toast.makeText(Activity01.this
  35.                             "ActivityNotFoundException" 
  36.                             Toast.LENGTH_LONG).show();  
  37.             
  38.               
  39.     });  
  40. //当语音结束时的回调函数onActivityResult 
  41. @Override 
  42. protected void onActivityResult(int requestCode,int resultCode,Intent data) 
  43.     // 判断是否是我们执行的语音识别 
  44.     if(requestCode==VOICE_RECOGNITION_REQUEST_CODE&&resultCode==RESULT_OK) 
  45.     
  46.         // 取得语音的字符 
  47.         ArrayList<String> results data.getStringArrayListExtra  
  48.         RecognizerIntent.EXTRA_RESULTS); 
  49.         //设置视图更新 
  50.         //mList.setAdapter(new ArrayAdapter<String>(this,android. 
  51.         R.layout.simple_list_item_1,results)); 
  52.         String resultsString "" 
  53.         for (int 0results.size(); i++) 
  54.         
  55.             resultsString += results.get(i); 
  56.          
  57.         Toast.makeText(this,resultsString,Toast.LENGTH_LONG).show();  
  58.         super.onActivityResult(requestCode, resultCode, data); 
  59.     
  60. }