2011-08-31 64 views
0

我是很新的Android开发,我想创建一个基本的应用程序,它利用了VoiceRecognition设施,以显示所说的文本...无法实现谷歌API样品(VoiceRecognition)

package com.example.android.apis.app; 

import com.example.android.apis.R; 

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; 

/** 
* Sample code that invokes the speech recognition intent API. 
*/ 
public class VoiceRecognition extends Activity implements OnClickListener { 

    private static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; 

    private ListView mList; 

    /** 
    * Called with the activity is first created. 
    */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     // Inflate our UI from its XML layout description. 
     setContentView(R.layout.voice_recognition); 

     // Get display items for later interaction 
     Button speakButton = (Button) findViewById(R.id.btn_speak); 

     mList = (ListView) findViewById(R.id.list); 

     // Check to see if a recognition activity is present 
     PackageManager pm = getPackageManager(); 
     List<ResolveInfo> activities = pm.queryIntentActivities(
       new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 
     if (activities.size() != 0) { 
      speakButton.setOnClickListener(this); 
     } else { 
      speakButton.setEnabled(false); 
      speakButton.setText("Recognizer not present"); 
     } 
    } 

    /** 
    * Handle the click on the start recognition button. 
    */ 
    public void onClick(View v) { 
     if (v.getId() == R.id.btn_speak) { 
      startVoiceRecognitionActivity(); 
     } 
    } 

    /** 
    * Fire an intent to start the speech recognition activity. 
    */ 
    private void startVoiceRecognitionActivity() { 
     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); 
    } 

    /** 
    * Handle the results from the recognition activity. 
    */ 
    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == VOICE_RECOGNITION_REQUEST_CODE && resultCode == RESULT_OK) { 
      // Fill the list view with the strings the recognizer thought it could have heard 
      ArrayList<String> matches = data.getStringArrayListExtra(
        RecognizerIntent.EXTRA_RESULTS); 
      mList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, 
        matches)); 
     } 

     super.onActivityResult(requestCode, resultCode, data); 
    } 
} 

我创建了谷歌提供的VoiceRecognition代码的类:

它经历了千百年来编译,因为它不停地抱怨“com.example.android.apis.R”是无法得到解决......我进口在API中提供相关的XML文件并将其放入main.xml中

<?xml version="1.0" encoding="utf-8"?> 
<!-- 
... 
--> 

<!-- This activity displays UI for launching voice recognition --> 

<LinearLayout xmlns:android="......." 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
    android:orientation="vertical"> 

    <TextView 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:paddingBottom="4dip" 
     android:text="@string/voice_recognition_prompt" /> 

    <Button android:id="@+id/btn_speak" 
     android:layout_width="fill_parent" 
     android:layout_height="wrap_content" 
     android:text="@string/speak_button" /> 

    <ListView android:id="@+id/list" 
     android:layout_width="fill_parent" 
     android:layout_height="0dip" 
     android:layout_weight="1" /> 

</LinearLayout> 

然后我将voice_recognition_prompt和speak_button字符串添加到值文件中(这对我来说都是新的,我不确定是否按照正确的顺序完成了这些操作)。

最后,该应用程序编译,但它只是给出了强制关闭错误信息。有没有我可能错过的特定步骤?一些特定的项目配置使用这个Google API示例?

我真的很感谢你的帮助。

+0

你好亚历克斯,检查我的答案,如果它是真的,那么马克是正确的。 –

回答

0

你好亚历克斯请使用下面的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"> 
    <TextView android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:paddingBottom="4dip" 
     android:text="prompt" /> 

    <Button android:id="@+id/btn_speak" android:layout_width="fill_parent" 
     android:layout_height="wrap_content" android:text="speak" /> 

    <ListView android:id="@+id/list" android:layout_width="fill_parent" 
     android:layout_height="0dip" android:layout_weight="1" /> 
</LinearLayout> 

再检查,你的部队密切错误就解决了。

+0

您的XML文件的确解决了这个问题。非常感谢你。该应用程序在模拟器上无法正常工作,说“识别器不存在”,但我听到其他人提到这一点....但如果部署在安装了Google语音搜索的手机上,它确实工作并打印出口语。 ...再次感谢Dipak! – Alex