1

初歩的な質問...

次の 4 行のコードがあります。

3行目は、ユーザーに(音声で)アクションについて確信があるかどうかを尋ねます。

次に、4 行目で speechYesNo というメソッド (以下に含まれます) を呼び出して、ユーザーの応答をリッスンします。

問題は、txtSpeech.speak 行 (3 行目) が話し終わる前に speechYesNo メソッドが呼び出され、"Are you sure..." という音声行とユーザーの応答が記録されることです。

たとえば、ユーザーが「はい」と答えた場合、speechYesNo メソッドの結果は次のようになります。「xxxxx を追加してよろしいですか はい」

結果が「はい」になりたいだけです。

speechYesNo() メソッドが呼び出される前に、3 行目 (txtSpeech.speak) を強制的に終了させる方法はありますか?

ありがとう

String strCommonName = myUtil.getCommonName(strFinalResult);
String strToSpeak = "Are you sure you would like to add " + strCommonName;
txtSpeech.speak(strToSpeak, TextToSpeech.QUEUE_FLUSH, null);

speechYesNo();

これが speechYesNo() メソッドです

public void speechYesNo() {
    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());

    if(intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, 9);
    } else {
        Toast.makeText(context, "Your device does not support Speech Input.", Toast.LENGTH_LONG).show();
    }

}

これが onActivityResult です...

@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {

        case 10:

            if(resultCode == RESULT_OK && data != null) {

               ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
               String strResult = result.get(0);
               Double dblStringComparison = 0.000;
               String strFinalResult = "Unknown";

               for(int intCount = 0; intCount <= arrAnimals.size()-1; intCount++) {

                   String strVal1 = strResult;
                   String strVal2 = myUtil.getCommonName(arrAnimals.get(intCount));
                   Double dblTemp = myUtil.similarity(strVal1, strVal2 );

                   if(dblTemp > dblStringComparison){
                       dblStringComparison = dblTemp;
                       strFinalResult = arrAnimals.get(intCount);
                   }

               }


                atvAnimalName.setText(strFinalResult);

                String strCommonName = myUtil.getCommonName(strFinalResult);
                String strToSpeak = "Are you sure you would like to add " + strCommonName;
                txtSpeech.speak(strToSpeak, TextToSpeech.QUEUE_FLUSH, null);

                speechYesNo();

            }

            break;

        case 9:

            if(resultCode == RESULT_OK && data != null) {

                ArrayList<String> result2 = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                String strYesNo0 = result2.get(0);
                Toast.makeText(context, strYesNo0, Toast.LENGTH_LONG).show();

            }

            break;
    }
}

ここに完全なスクリプトがあります

openSpeechMode メソッドは、ユーザーが画像をクリックすると起動し、ユーザーの音声選択を記録します。

これが完了したら、アプリでユーザーに、自分の選択について確信があるかどうかを尋ねます。

ユーザーが「はい」と答えた場合は、さらに作業を行います。

上記の問題は、スピーチ レコーダーが「よろしいですか」という質問と「はい」という応答を記録していることです。

public void openSpeechMode(View view) {

    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());

    if(intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, 10);
    } else {
        Toast.makeText(context, "Your device does not support Speech Input.", Toast.LENGTH_LONG).show();
    }

}



public void speechYesNo() {

    Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
    intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE, Locale.getDefault());

    if(intent.resolveActivity(getPackageManager()) != null) {
        startActivityForResult(intent, 9);
    } else {
        Toast.makeText(context, "Your device does not support Speech Input.", Toast.LENGTH_LONG).show();
    }

}



@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);

    switch (requestCode) {

        case 10:

            if(resultCode == RESULT_OK && data != null) {

               ArrayList<String> result = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
               String strResult = result.get(0);
               Double dblStringComparison = 0.000;
               String strFinalResult = "Unknown";

               for(int intCount = 0; intCount <= arrAnimals.size()-1; intCount++) {

                   String strVal1 = strResult;
                   String strVal2 = myUtil.getCommonName(arrAnimals.get(intCount));
                   Double dblTemp = myUtil.similarity(strVal1, strVal2 );

                   if(dblTemp > dblStringComparison){
                       dblStringComparison = dblTemp;
                       strFinalResult = arrAnimals.get(intCount);
                   }

               }


                atvAnimalName.setText(strFinalResult);

                String strCommonName = myUtil.getCommonName(strFinalResult);
                String strToSpeak = "Are you sure you would like to add " + strCommonName;
                txtSpeech.speak(strToSpeak, TextToSpeech.QUEUE_FLUSH, null);

//                    speechYesNo();

            }

            break;

        case 9:

            if(resultCode == RESULT_OK && data != null) {

                ArrayList<String> result2 = data.getStringArrayListExtra(RecognizerIntent.EXTRA_RESULTS);
                String strYesNo0 = result2.get(0);
                Toast.makeText(context, strYesNo0, Toast.LENGTH_LONG).show();

            }

            break;
    }

}
4

1 に答える 1