Per tutti gli utenti che utilizzano Android voice recognition API, c'era un comodo RecognitionListener che si poteva registrare e che spingeva vari eventi ai propri callback. In particolare, c'era il onBufferReceived(byte[])
seguente metodo:Perché RecognitionListener ha smesso di funzionare in JellyBean?
public abstract void onBufferReceived (byte[] buffer)
Dal: Livello API è stata ricevuta 8 Ulteriori suono. Lo scopo di questa funzione è consentire di dare un feedback all'utente relativamente all'audio catturato . Non vi è alcuna garanzia che questo metodo verrà chiamato.
Parametri
buffer
un tampone contenente una sequenza di big-endian 16 bit interi che rappresentano un singolo flusso audio canale. La frequenza di campionamento dipende dall'implementazione.
Anche se il metodo dichiara esplicitamente che non v'è alcuna garanzia che sarà chiamato, in ICS e prima che sarebbe effettivamente chiamato il 100% del tempo: abbastanza regolarmente, almeno, che concatenando tutti i byte ricevuto in questo modo, è possibile ricostruire l'intero flusso audio e riprodurlo.
Per qualche motivo, tuttavia, nell'SDK Jellybean, questo dispositivo ha smesso di funzionare automaticamente. Non ci sono avvisi di deprecazione e il codice è ancora compilato, ma lo onBufferReceived
è ora mai chiamato. Tecnicamente questo non sta infrangendo la loro API (dal momento che dice che non c'è "nessuna garanzia" che verrà chiamato il metodo), ma chiaramente si tratta di un cambio di rottura per molte cose che dipendono da questo comportamento.
Qualcuno sa perché questa funzionalità è stata disabilitata e se c'è un modo per replicare il suo comportamento su Jellybean?
Chiarimento: mi rendo conto che l'intera RecognizerIntent
cosa è un'interfaccia con più implementazioni (tra cui alcuni disponibili sul Play Store), e che essi possono decidere ogni cosa a che fare con RecognitionListener
. Mi riferisco specificamente all'implementazione predefinita di Google che viene utilizzata dalla maggior parte dei telefoni Jellybean.
Grazie per l'analisi approfondita che conferma che il problema è universale su Jellybean :) Immagino che l'unico modo per ottenere un risultato più definitivo sia ottenere un tecnico Google che spieghi perché questo è successo. Grazie! –