0

Я разрабатываю приложение с SpeechRecognizer. Я буду использовать его в разных действиях для разных целей, и он немного грязный, добавляя одинаковый код все время к разным классам. Поэтому я переместил свой пользовательский RecognitionListener в новый класс. Таким образом, я просто инициализирую его, когда хочу от своей деятельности. Но я не могу найти способ получить результат слушателя (в этом случае ArrayList возможных значений для распознаваемой речи) в моей текущей деятельности, чтобы использовать его.Получить приемник onResults() из другого вида деятельности

Я попытался реализовать его через интерфейс, но я думаю, что я сделал это неправильно. Мой Слушатель код заключается в следующем:

public class SpeechRecognitionListener implements RecognitionListener 
{ 
    private final String TAG = "SpeechRecognitionListener"; 
private Intent mSpeechRecognizerIntent; 
private SpeechRecognizer mSpeechRecognizer; 

public SpeechRecognitionListener(Intent speechRecognizerIntent, SpeechRecognizer speechRecognizer) { 
    mSpeechRecognizerIntent = speechRecognizerIntent; 
    mSpeechRecognizer = speechRecognizer; 
} 

@Override 
public void onBeginningOfSpeech() 
{ 
    //Log.d(TAG, "onBeginingOfSpeech"); 
} 

@Override 
public void onBufferReceived(byte[] buffer) 
{ 

} 

@Override 
public void onEndOfSpeech() 
{ 
    //Log.d(TAG, "onEndOfSpeech"); 
} 

@Override 
public void onError(int error) 
{ 
    mSpeechRecognizer.startListening(mSpeechRecognizerIntent); 

    //Log.d(TAG, "error = " + error); 
} 

@Override 
public void onEvent(int eventType, Bundle params) 
{ 

} 

@Override 
public void onPartialResults(Bundle partialResults) 
{ 

} 

@Override 
public void onReadyForSpeech(Bundle params) 
{ 
    Log.d(TAG, "onReadyForSpeech"); //$NON-NLS-1$ 
} 

@Override 
public void onResults(Bundle results) 
{ 
    //I want to recieve this array in my main activity 
    ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 

} 

@Override 
public void onRmsChanged(float rmsdB) 
{ 
} 
} 

Я просто хочу, чтобы получить onResult() массив в моей текущей деятельности для работы с ним. Надеюсь, что кто-то мне поможет! Спасибо огромное!

ответ

2

Попробуйте определить интерфейс первым:

public interface RecognitionCallback 
{ 
    abstract void onRecoginitionFinished(ArrayList<String> matches); 
} 

Теперь вашу деятельность, которая должна быть отозвано реализовать этот интерфейс. Например:

public class MainActivity extends AppCompatActivity implements RecognitionCallback { 

    ... 

    public void onRecognitionFinished(ArrayList<String> matches) 
    { 
    //do your things with the data 
    } 

} 

добавить также некоторые свойства класса SpeechRecognitionListener:

public class SpeechRecognitionListener implements RecognitionListener 
{ 
    private final String TAG = "SpeechRecognitionListener"; 
    private Intent mSpeechRecognizerIntent; 
    private SpeechRecognizer mSpeechRecognizer; 
    private RecognitionCallback mCallback 

    public SpeechRecognitionListener(Intent speechRecognizerIntent, SpeechRecognizer speechRecognizer, RecognitionCallback callback) { 
     mSpeechRecognizerIntent = speechRecognizerIntent; 
     mSpeechRecognizer = speechRecognizer; 
     mCallback = callback; 

    ... 

    public void onResults(Bundle results) 
    { 

     ArrayList<String> matches = results.getStringArrayList(SpeechRecognizer.RESULTS_RECOGNITION); 
     mCallback.onRecognitionFinished(matches); 
    } 
}  

И, наконец, в вашей деятельности, где вам нужно, чтобы перезвонил написать это:

SpeechRecognitionListener listener = new SpeechRecognitionLinstner(intent,recognizer,this); 
+1

Вы слишком быстро :) Это правильный ответ –

+0

Im согласен с @DavidSeroussi! Спасибо огромное ! Im действительно noob с интерфейсами: P. Кстати! Если вы знаете что-то о SpeechRecognition, вы можете проверить мой последний пост, я буду очень благодарен, если кто-нибудь поможет мне в этом! –

+0

@FranciscoDurdinGarcia Я не знаком с распознаванием речи, но в реализации кодирования, если есть какие-либо вопросы, я был бы рад помочь – Pooya

Смежные вопросы