2012-07-24 56 views
0

我有一個非常棒的語音輸入類。不過,我希望我的應用的用戶能夠在應用的任何頁面上使用語音輸入代碼。我需要做的是在每個xml上都設置一個按鈕,使我可以使用我的語音輸入代碼,而無需將所有語音輸入代碼複製到每個課程中。我如何引用我的代碼,這樣我就可以簡單地在我的代碼中添加一些內容,說如果我按下此按鈕,它會在另一個類中執行該活動? 代碼順序如下,我想要能夠有一個使用此代碼的按鈕的voiceinput代碼java類,java類。在另一個類中引用一個類按鈕動作

package com.example.com.proto1; 

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 { 



    public static final int VOICE_RECOGNITION_REQUEST_CODE = 1234; 

    public ListView mList; 
    public Button speakButton; 

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

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

     // Get display items for later interaction 

     voiceinputbuttons(); 


     // 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"); 
     } 
    } 

    public void voiceinputbuttons() { 
     // TODO Auto-generated method stub 
     speakButton = (Button) findViewById(R.id.btn_speak); 
     mList = (ListView) findViewById(R.id.list); 
    } 

    /** 
    * 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. 
    */ 
    public 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 
    public 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)); 
      //matches is the result of voice input. It is a list of what the user possibly said. 
      //Using an if statement for the keyword you want to use allows the use of any activity if keywords match 
      //it is possible to set up multiple keywords to use the same activity so more than one word will allow the user 
      //to use the activity (makes it so the user doesn't have to memorize words from a list) 
      //to use an activity from the voice input information simply use the following format; 
      //if (matches.contains("keyword(s) here") { startActivity(new Intent("name.of.manifest.ACTIVITY") 

      if (matches.contains("information")) { 
       startActivity(new Intent("android.intent.action.INFOSCREEN")); 
      } 

      if (matches.contains("home")) { 
       startActivity(new Intent("android.intent.action.MENU")); 
      } 

     } 

     super.onActivityResult(requestCode, resultCode, data); 

    } 
} 











package com.example.com.proto1; 

import android.app.Activity; 
import android.content.Intent; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.View; 
import android.widget.Button; 
import android.content.pm.PackageManager; 
import android.content.pm.ResolveInfo; 
import android.speech.RecognizerIntent; 
import android.view.View.OnClickListener; 
import android.widget.ArrayAdapter; 
import android.widget.ListView; 
import android.speech.tts.TextToSpeech; 
import java.util.ArrayList; 
import java.util.List; 

public class menu extends Activity implements TextToSpeech.OnInitListener { 

    MediaPlayer sep, aep, vpm; 

    TextToSpeech mTts; 

    public void onInit(int i) { 
     // TODO Auto-generated method stub 
     mTts.speak("EyePhone Main Menu", TextToSpeech.QUEUE_FLUSH, null); 

    } 

    @Override 
    protected void onCreate(Bundle aboutmenu) { 
     // TODO Auto-generated method stub 
     super.onCreate(aboutmenu); 
     setContentView(R.layout.mainx); 


     // Setting up the button references 
     Button info = (Button) findViewById(R.id.aboutbutton); 
     Button voice = (Button) findViewById(R.id.voicebutton); 
     Button speakButton = (Button) findViewById(R.id.btn_speak); 

     info.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       startActivity(new Intent("android.intent.action.INFOSCREEN")); 

      } 
     }); 

     voice.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       try { 
        Intent voiceIntent = new Intent(
          "android.intent.action.RECOGNITIONMENU"); 
        startActivity(voiceIntent); 
       } catch (Exception e) { 

       } 
      } 
     }); 

     speakButton.setOnClickListener(new View.OnClickListener() { 

      public void onClick(View v) { 
       // TODO Auto-generated method stub 
       try { 

        //this is the place where I thought the code should go that I am asking about 

       } catch (Exception e) { 

       } 
      } 

     }); 

    } 

} 

回答

0

定義在一個新的類文件中的方法STATIC(可以說TTSHelper)這需要活動引用作爲參數(和其他如果需要)。現在從您的按鈕的方法onClick調用此靜態方法。這樣做可以讓您不重複每個活動課程中的代碼。

定義爲:

public class TTSHelper { 
    public static void myMethod(Activity activity){ 
     //do whatever you want 
    } 
} 

用途爲:

public void onClick(View v) { 
    TTSHelper.meMethod(this); 
} 

附:您可以將Activity的Context作爲參數替換爲靜態方法的參數,但是您應該知道需要傳遞哪個上下文引用(活動/應用程序)。

+0

這不適合我。你能用我的代碼給我一個例子嗎? – 2012-07-24 15:39:31

相關問題