Android Speech Recognition Continuous Service

后端 未结 2 1998
面向向阳花
面向向阳花 2020-11-27 02:59

I\'m trying to create a service to run continuous speech recognition in Android 4.2. Using the answer from this link ( Android Speech Recognition as a service on Android 4.

2条回答
  •  温柔的废话
    2020-11-27 03:35

    Class members in MainActivity

    private int mBindFlag;
    private Messenger mServiceMessenger;
    

    Start service in onCreate()

    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
    
        Intent service = new Intent(activityContext, VoiceCommandService.class);
        activityContext.startService(service);
        mBindFlag = Build.VERSION.SDK_INT < Build.VERSION_CODES.ICE_CREAM_SANDWICH ? 0 : Context.BIND_ABOVE_CLIENT;
    
    }
    

    Bind service in onStart()

    @Override
    protected void onStart()
    {
        super.onStart();
    
        bindService(new Intent(this, VoiceCommandService.class), mServiceConnection, mBindFlag);
    }
    
    @Override
    protected void onStop()
    {
        super.onStop();
    
        if (mServiceMessenger != null)
        {
            unbindService(mServiceConnection);
            mServiceMessenger = null;
        }
    }
    

    mServiceConnection member

    private final ServiceConnection mServiceConnection = new ServiceConnection()
    {
        @Override
        public void onServiceConnected(ComponentName name, IBinder service)
        {
            if (DEBUG) {Log.d(TAG, "onServiceConnected");} //$NON-NLS-1$
    
            mServiceMessenger = new Messenger(service);
            Message msg = new Message();
            msg.what = VoiceCommandService.MSG_RECOGNIZER_START_LISTENING; 
    
            try
            {
                mServiceMessenger.send(msg);
            } 
            catch (RemoteException e)
            {
                e.printStackTrace();
            }
        }
    
        @Override
        public void onServiceDisconnected(ComponentName name)
        {
            if (DEBUG) {Log.d(TAG, "onServiceDisconnected");} //$NON-NLS-1$
            mServiceMessenger = null;
        }
    
    }; // mServiceConnection
    

    In the service

    @Override
    public IBinder onBind(Intent intent)
    {
        Log.d(TAG, "onBind");  //$NON-NLS-1$
    
        return mServerMessenger.getBinder();
    }
    

提交回复
热议问题