I have a voice input class that works absolutely great. However, I want the user of my app to be able to use voice input code on any page of the app. What I need to do is have a button set up on every xml that allows me to use my voice input code without having to copy all of my voice input code into every single class. How do I reference my code so I can simply have something in my code that says if I press this button it does the activity in another class? The code in order as follows is, voiceinput code java class, java class that I want to be able to have a button that uses this code.
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) {
}
}
});
}
}
Define a STATIC
method in a new class file (lets say TTSHelper
) which takes Activity reference as parameter (and others if required). Now call this static method from the onClick method of your button. Doing so will allow you not to repeat the code in each activity class.
Define as:
public class TTSHelper {
public static void myMethod(Activity activity){
//do whatever you want
}
}
Use as:
public void onClick(View v) {
TTSHelper.meMethod(this);
}
PS You may replace reference of Activity with Context as a parameter to your static method, but then you should be aware of which context reference you need to pass (activity/application).
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.