zoukankan      html  css  js  c++  java
  • Android语音识别RecognizerIntent

    在网上找了一篇关于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中的代码:
    01 public class RecognizerIntentActivity extends Activity {
    02  
    03     private Button btnReconizer;
    04     private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234;
    05     @Override
    06     protected void 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(new OnClickListener() {
    13              
    14             @Override
    15             public void onClick(View v) {
    16                 // TODO Auto-generated method stub
    17                 try{
    18                 //通过Intent传递语音识别的模式,开启语音
    19                 Intent intent=new Intent(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     protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    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             String resultString="";
    45             for(int i=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-permission android:name="android.permission.INTERNET" />

    运行后效果:

      



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

  • 相关阅读:
    团队作业3--需求改进&系统设计
    需求分析&原型设计
    团队项目作业1-团队展示
    结对编程
    APP案例分析之华为浏览器
    四则运算生成器做法思路
    关于PHP使用GD库生成的验证码无法在别处显示
    第二次课程心得
    两个程序代码
    5.8下午
  • 原文地址:https://www.cnblogs.com/crane13/p/3150202.html
Copyright © 2011-2022 走看看