2013-08-26 76 views
1

出於某種原因,我的搜索活動正在運行,但thumbsup活動無法啓動。它承認我說「三」,然後我的應用程序崩潰。我需要在這裏添加什麼來實現這個功能?爲什麼我不能用語音識別開始我的活動?

該應用程序能正常工作之前,我補充這部分:

if (textMatchList.get(0).contains("three")) { 
        // create an intent indicating we want 
         // to start the ThumbsUp activity. 
         // Important! Make sure your activity is 
         // in the AndroidManifest.xml file! 
         Intent i = new Intent(this, ThumbsUp.class); 

         // start the activity based on the Intent 
         startActivity(i); 

logcat的:

08-26 09:58:14.934: E/Trace(7730): error opening trace file: No such file or directory (2) 
08-26 09:58:14.934: D/ActivityThread(7730): setTargetHeapUtilization:0.25 
08-26 09:58:14.934: D/ActivityThread(7730): setTargetHeapIdealFree:8388608 
08-26 09:58:14.934: D/ActivityThread(7730): setTargetHeapConcurrentStart:2097152 
08-26 09:58:15.214: D/libEGL(7730): loaded /system/lib/egl/libEGL_adreno200.so 
08-26 09:58:15.244: D/libEGL(7730): loaded /system/lib/egl/libGLESv1_CM_adreno200.so 
08-26 09:58:15.244: D/libEGL(7730): loaded /system/lib/egl/libGLESv2_adreno200.so 
08-26 09:58:15.605: I/Adreno200-EGLSUB(7730): <ConfigWindowMatch:2087>: Format RGBA_8888. 
08-26 09:58:15.695: E/(7730): <s3dReadConfigFile:75>: Can't open file for reading 
08-26 09:58:15.695: E/(7730): <s3dReadConfigFile:75>: Can't open file for reading 
08-26 09:58:15.695: D/OpenGLRenderer(7730): Enabling debug mode 0 
08-26 09:58:15.745: I/Choreographer(7730): Skipped 31 frames! The application may be doing too much work on its main thread. 

Java代碼:

package com.example.voicerecognitionactivity; 

import java.util.ArrayList; 
import java.util.List; 

import com.example.voicerecognitionactivity.ThumbsUp; 

import android.app.Activity; 
import android.app.SearchManager; 
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.widget.AdapterView; 
import android.widget.ArrayAdapter; 
import android.widget.Button; 
import android.widget.EditText; 
import android.widget.ListView; 
import android.widget.Spinner; 
import android.widget.Toast; 

public class VoiceRecognitionActivity extends Activity { 
    private static final int VOICE_RECOGNITION_REQUEST_CODE = 1001; 

    private EditText metTextHint; 
    private ListView mlvTextMatches; 
    private Spinner msTextMatches; 
    private Button mbtSpeak; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 
     metTextHint = (EditText) findViewById(R.id.etTextHint); 
     mlvTextMatches = (ListView) findViewById(R.id.lvTextMatches); 
     msTextMatches = (Spinner) findViewById(R.id.sNoOfMatches); 
     mbtSpeak = (Button) findViewById(R.id.btSpeak); 
    } 

    public void checkVoiceRecognition() { 
     // Check if voice recognition is present 
     PackageManager pm = getPackageManager(); 
     List<ResolveInfo> activities = pm.queryIntentActivities(new Intent(
       RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0); 
     if (activities.size() == 0) { 
      mbtSpeak.setEnabled(false); 
      Toast.makeText(this, "Voice recognizer not present", 
        Toast.LENGTH_SHORT).show(); 
     } 
    } 

    public void speak(View view) { 
     Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); 
     // Specify the calling package to identify your application 
     intent.putExtra(RecognizerIntent.EXTRA_CALLING_PACKAGE, getClass() 
       .getPackage().getName()); 

     // Display an hint to the user about what he should say. 
     intent.putExtra(RecognizerIntent.EXTRA_PROMPT, metTextHint.getText() 
       .toString()); 

     // Given an hint to the recognizer about what the user is going to say 
     intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, 
       RecognizerIntent.LANGUAGE_MODEL_WEB_SEARCH); 

     // If number of Matches is not selected then return show toast message 
     if (msTextMatches.getSelectedItemPosition() == AdapterView.INVALID_POSITION) { 
      Toast.makeText(this, "Please select No. of Matches from spinner", 
        Toast.LENGTH_SHORT).show(); 
      return; 
     } 

     int noOfMatches = Integer.parseInt(msTextMatches.getSelectedItem() 
       .toString()); 
     // Specify how many results you want to receive. The results will be 
     // sorted where the first result is the one with higher confidence. 

     intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, noOfMatches); 

     startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE); 
    } 

    @Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode == VOICE_RECOGNITION_REQUEST_CODE) 

      //If Voice recognition is successful then it returns RESULT_OK 
      if(resultCode == RESULT_OK) { 

       ArrayList<String> textMatchList = data 
       .getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS); 

       if (!textMatchList.isEmpty()) { 

        if (textMatchList.get(0).contains("three")) { 
        // create an intent indicating we want 
         // to start the ThumbsUp activity. 
         // Important! Make sure your activity is 
         // in the AndroidManifest.xml file! 
         Intent i = new Intent(this, ThumbsUp.class); 

         // start the activity based on the Intent 
         startActivity(i); 

        // If first Match contains the 'search' word 
        // Then start web search. 
        if (textMatchList.get(0).contains("search")) { 

         String searchQuery = textMatchList.get(0).replace("search", 
         " "); 
         Intent search = new Intent(Intent.ACTION_WEB_SEARCH); 
         search.putExtra(SearchManager.QUERY, searchQuery); 
         startActivity(search); 

        } else { 
         // populate the Matches 
         mlvTextMatches 
         .setAdapter(new ArrayAdapter<String>(this, 
           android.R.layout.simple_list_item_1, 
           textMatchList)); 
        } 

       } 
      //Result code for various error. 
      }else if(resultCode == RecognizerIntent.RESULT_AUDIO_ERROR){ 
       showToastMessage("Audio Error"); 
      }else if(resultCode == RecognizerIntent.RESULT_CLIENT_ERROR){ 
       showToastMessage("Client Error"); 
      }else if(resultCode == RecognizerIntent.RESULT_NETWORK_ERROR){ 
       showToastMessage("Network Error"); 
      }else if(resultCode == RecognizerIntent.RESULT_NO_MATCH){ 
       showToastMessage("No Match"); 
      }else if(resultCode == RecognizerIntent.RESULT_SERVER_ERROR){ 
       showToastMessage("Server Error"); 
      } 
     super.onActivityResult(requestCode, resultCode, data);} 
    } 
    void showToastMessage(String message){ 
     Toast.makeText(this, message, Toast.LENGTH_SHORT).show(); 
    } 
} 

清單代碼

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
    package="com.example.voicerecognitionactivity" 
    android:versionCode="1" 
    android:versionName="1.0" > 

    <uses-sdk 
     android:minSdkVersion="8" 
     android:targetSdkVersion="17" /> 
    <uses-permission android:name="android.permission.INTERNET" /> 
    <application 
     android:allowBackup="true" 
     android:icon="@drawable/ic_launcher" 
     android:label="@string/app_name" 
     android:theme="@style/AppTheme" > 
     <activity 
      android:name="com.example.voicerecognitionactivity.VoiceRecognitionActivity" 
      android:label="@string/app_name" > 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity android:name="com.example.VoiceRecognitionActivity.ThumbsUp" 
        android:label ="@string/thumbsup" 
      ></activity> 

    </application> 

</manifest> 
+4

後堆棧跟蹤。 – hardartcore

+0

你有沒有在manifest中註冊活動? – anon

+0

是的,它已註冊 – user2593697

回答

0

具有u在烏爾清單文件中加入這樣的:從logcat的

<Activity 
     android:name = "Packagename.class" 
     android:label = "@string/label" 
    > 

    </Activity> 
+0

我沒有用字符串標記活動,但這是可選的權利? – user2593697

相關問題