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

我同意@DavidSeroussi!非常感谢 !我真的很喜欢接口:P。顺便说一句!如果您对SpeechRecognition有所了解,可以查看我的最后一篇文章,如果有人帮助我,我将非常感激! –

+0

@FranciscoDurdinGarcia我不熟悉语音识别,但在编码实现中,如果有任何问题我很乐意帮助 – Pooya

相关问题