Reputation: 171
Been trying to apply some of the solutions from similar questions, but I've had no luck so far.
I have an activity with two buttons, each button calls the RecognizerIntent to do some speech recognition. Im trying to have each button call its own RecognizerIntent and check for separate requestCode(s) with in the same activity.
this is what I have so far:
public class Cooking extends Activity implements OnClickListener{
ListView lv;
static final int check = 111;
static final int checka = 111;
static final int checkb = 111;
@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.cooking);
initialize();
}
private void initialize() {
// TODO Auto-generated method stub
lv = (ListView)findViewById(R.id.lvVoiceReturn);
display = (ImageView) findViewById(R.id.IVdisplay);
ImageView image1 = (ImageView) findViewById(R.id.IVimage1);
ImageView image2 = (ImageView) findViewById(R.id.IVimage2);
image1.setOnClickListener(this);
image2.setOnClickListener(this);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(false);
}
@Override
public void onClick(View v) {
if(v.getId() == R.id.IVimage1){
Intent a = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
a.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
a.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
a.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak.");
startActivityForResult(a, checka);
}else if(v.getId() == R.id.IVimage2){
Intent b = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
b.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
b.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
b.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak.");
startActivityForResult(b, checkb);
}
}
@Override
protected void onActivityResult(int requestCode,
int resultCode,
Intent data) {
// TODO Auto-generated method stub
if (requestCode == checka && resultCode == RESULT_OK){
ArrayList<String> results =
data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
lv.setAdapter(
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
results));
if(results.contains("really")
|| results.contains("yes really")
|| results.contains("disease"))
{
/////toast referenced to xml the after 400ms
counter_score ++ ;
txView.setId(1);
counter_score_z +=1;
ourSong = MediaPlayer.create(Cooking.this, R.raw.rightsound2);
ourSong.start();
AlertDialog dialogBuilder = new AlertDialog.Builder(this).create();
dialogBuilder.setTitle("Nice");
dialogBuilder.setMessage("Correct!.");
dialogBuilder.setIcon(R.drawable.ic_mark);
dialogBuilder.show();
Thread timer = new Thread(){
public void run(){
try{
sleep(2500);
}catch (InterruptedException e){
e.printStackTrace();
} finally {
Intent nextAct = new Intent(Cooking.this, LetterEx.class);
startActivity(nextAct);
finish();
}
}
};
timer.start();
}else{
lv.setAdapter(
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
results));
counter_score +=0;
txView.setId(0);
counter_score_z +=0;
ourSong = MediaPlayer.create(Cooking.this, R.raw.wrongsound);
ourSong.start();
AlertDialog dialogBuilder = new AlertDialog.Builder(this).create();
dialogBuilder.setTitle("Oops");
dialogBuilder.setMessage("Try again");
dialogBuilder.setIcon(R.drawable.ic_wrong);
dialogBuilder.setButton(
"Continue",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent openApp =
new Intent(Cooking.this, LetterEx.class);
startActivity(openApp);
finish();
}
});
dialogBuilder.setButton2(
"try again",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialogBuilder.show();
Thread timer = new Thread(){
public void run(){
try{
sleep(4000);
}catch (InterruptedException e){
e.printStackTrace();
} finally {
}
}
};
timer.start();
}
}
if (requestCode == checkb && resultCode == RESULT_OK){
ArrayList<String> results =
data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
lv.setAdapter(
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
results));
if(results.contains("delivering mail")
|| results.contains("no not really")
|| results.contains("hi"))
{
/////toast referenced to xml the after 400ms
counter_score ++ ;
txView.setId(1);
counter_score_z +=1;
ourSong = MediaPlayer.create(Cooking.this, R.raw.rightsound2);
ourSong.start();
AlertDialog dialogBuilder = new AlertDialog.Builder(this).create();
dialogBuilder.setTitle("Nice");dialogBuilder.setMessage("Correct!");
dialogBuilder.setIcon(R.drawable.ic_mark);
dialogBuilder.show();
Thread timer = new Thread(){
public void run(){
try{
sleep(2500);
}catch (InterruptedException e){
e.printStackTrace();
} finally {
Intent nextAct2 = new Intent(Cooking.this, LetterEx.class);
startActivity(nextAct2);
finish();
}
}
};
timer.start();
}else{
lv.setAdapter(
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
results));
counter_score +=0;
txView.setId(0);
counter_score_z +=0;
ourSong = MediaPlayer.create(Cooking.this, R.raw.wrongsound);
ourSong.start();
AlertDialog dialogBuilder = new AlertDialog.Builder(this).create();
dialogBuilder.setTitle("Oops");
dialogBuilder.setMessage("Try again");
dialogBuilder.setIcon(R.drawable.ic_wrong);
dialogBuilder.setButton(
"Continue",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent openApp2 = new Intent(Cooking.this, LetterEx.class);
startActivity(openApp2);
finish();
}
});
dialogBuilder.setButton2("try again",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// TODO Auto-generated method stub
dialog.dismiss();
}
});
dialogBuilder.show();
Thread timer = new Thread(){
public void run(){
try{
sleep(4000);
}catch (InterruptedException e){
e.printStackTrace();
} finally {
}
}
};
timer.start();
}
}
super.onActivityResult(requestCode, resultCode, data);
}
}
This doesnt crash or anything, but its not doing what I want it to do.
When button (IVimage1) is pressed...
public void onClick(View v) {
if(v.getId() == R.id.IVimage1){
Intent a = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
a.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
a.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, 1);
a.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speak.");
startActivityForResult(a, checka);
The requestCode for checka is correctly checked and the "correct" dialog shows up, however the incorrect dialog for "checkb" also shows up. Clearly I need to break the If statement code..to separate the requestCodes and assing one to each button.
I've tried break; return; doing swtich(); and case from similar questions but have had no luck so far...
Upvotes: 2
Views: 451
Reputation: 67522
You've defined it such that checka == checkb
always. Try giving them different values.
// For example:
static final int check = 111;
static final int checka = 112;
static final int checkb = 113;
Upvotes: 1