2012-08-25 68 views
2

一直試圖應用來自類似問題的一些解決方案,但迄今爲止我還沒有運氣。OnActivityResult處理同一活動中的不同請求代碼

我有兩個按鈕的活動,每個按鈕調用RecognizerIntent做一些語音識別。 我試圖讓每個按鈕都調用自己的RecognizerIntent,並在同一個活動中檢查單獨的requestCode(s)。

這是我到目前爲止有:

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

這並不崩潰或任何東西,但它不是做我想做的事情。

當按下按鈕(IVimage1)...

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); 

爲checka的requestCode正確檢查和「正確」的對話框中顯示出來,但是,對於「checkb」不正確的對話框中也出現了。很明顯,我需要打破If語句代碼來分隔requestCodes並將其分配給每個按鈕。

我試過了;返回;做swtich();並從類似的問題,但迄今沒有運氣的情況下...

回答

1

你已經定義它,使checka == checkb總是。嘗試給他們不同的價值。

// For example: 
    static final int check = 111; 
    static final int checka = 112; 
    static final int checkb = 113; 
+0

是的..這是它..謝謝! – Mcorv

相關問題