2

singleInstance 起動モードでアクティビティ内から起動された場合、RecognizerIntent を使用するアクティビティが正しく機能しないことを言及している別のスレッドを既に見ました。だから私は私の代替手段が何であるかを知りたい.

私の使用例は次のとおりです。私のアプリケーションはイベントをリッスンし、このイベントが発生すると、ユーザーが別のアプリケーションを使用している場合でも警告ダイアログを表示します。他の質問から、これを行う一般的な方法は、singleInstance 起動モードでアクティビティを起動することであることがわかりました。しかし、この警告ダイアログが表示されたら、RecognizerIntent を使用して、音声からテキストへの処理を行う必要があります。ただし、音声入力ダイアログは入力を待たずに onActivityResult() がすぐに呼び出されます。「singleInstance」以外の起動モードを持つアクティビティからアラート ダイアログがポップアップする場合、問題なく動作します。

この問題にアプローチする他の方法はありますか?

4

1 に答える 1

0

この方法でコードを実行してみてください:-

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

上記のコードは onCreate() 内に記述し、以下はその外側に記述する必要があります

public void onClick(View v) {
    if (v.getId() == R.id.btn_speak) {
        startVoiceRecognitionActivity();
    }
}


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

//Run a loop checking whether the list is empty or not:-
    while(activities.isEmpty()){
        //wait    
    }
//Now run your alert dialog box 
}

DellXCD35 android 2.3.3でテストしましたが、リストビューで選択したいテキストのリストを取得すると、完全に機能します。

于 2013-02-24T05:53:49.950 に答える