Make sure cancel is called on tear down.

- Make sure cancel is called when consumer of SpeechRecognizer calls
  destroy.
- If consumer goes away, make sure to call cancel as well.

b/17584947 Pressing mic button in Music hoses audio

Change-Id: Ibe1198b37fe6167493a8694f9089d970f1eb07de
This commit is contained in:
Jerome Poichet
2014-09-30 17:54:03 -07:00
parent 496aeb1a61
commit c1fb6dc1a4
2 changed files with 20 additions and 1 deletions

View File

@@ -91,9 +91,20 @@ public abstract class RecognitionService extends Service {
}
};
private void dispatchStartListening(Intent intent, IRecognitionListener listener) {
private void dispatchStartListening(Intent intent, final IRecognitionListener listener) {
if (mCurrentCallback == null) {
if (DBG) Log.d(TAG, "created new mCurrentCallback, listener = " + listener.asBinder());
try {
listener.asBinder().linkToDeath(new IBinder.DeathRecipient() {
@Override
public void binderDied() {
mHandler.sendMessage(mHandler.obtainMessage(MSG_CANCEL, listener));
}
}, 0);
} catch (RemoteException re) {
Log.e(TAG, "dead listener on startListening");
return;
}
mCurrentCallback = new Callback(listener);
RecognitionService.this.onStartListening(intent, mCurrentCallback);
} else {

View File

@@ -396,6 +396,14 @@ public class SpeechRecognizer {
* Destroys the {@code SpeechRecognizer} object.
*/
public void destroy() {
if (mService != null) {
try {
mService.cancel(mListener);
} catch (final RemoteException e) {
// Not important
}
}
if (mConnection != null) {
mContext.unbindService(mConnection);
}