我有一个非常棒的语音输入课程。但是,我希望我的应用程序的用户能够在应用程序的任何页面上使用语音输入代码。我需要做的是在每个xml上设置一个按钮,允许我使用我的语音输入代码,而不必将所有语音输入代码复制到每个类中。我如何引用我的代码,以便我可以在我的代码中添加一些内容,如果我按下此按钮它会在另一个类中执行活动? 按顺序排列的代码如下:voiceinput code java class,java class,我希望能有一个使用此代码的按钮。
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 :(得分:0)
在新的类文件(例如STATIC
)中定义TTSHelper
方法,该文件将 Activity 引用作为参数(如果需要,还有其他参数)。现在,从按钮的 onClick 方法调用此静态方法。这样做将使您不必重复每个活动类中的代码。
定义为:
public class TTSHelper {
public static void myMethod(Activity activity){
//do whatever you want
}
}
用作:
public void onClick(View v) {
TTSHelper.meMethod(this);
}
P.S。您可以将Activity与Context的引用替换为静态方法的参数,但是您应该知道需要传递哪个上下文引用(活动/应用程序)。