Asimismo, asegúrese de solicitar el correcto permisos del usuario. Me quedé atrapado con un valor de retorno de error 9: INSUFFICIENT_PERMISSIONS, aunque tenía los permisos apropiados RECORD_AUDIO enumerados en el manifiesto.
Al seguir el código de muestra here pude obtener los permisos del usuario y luego el reconocedor de voz devolvió buenas respuestas.
E.g. Este bloque pongo en mi onCreate() para la actividad, a pesar de que podría ir a otro lugar en el flujo de interfaz de usuario, antes de llamar a los métodos SpeechRecognizer:
protected void onCreate(Bundle savedInstanceState) {
...
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.RECORD_AUDIO)
!= PackageManager.PERMISSION_GRANTED) {
// Should we show an explanation?
if (ActivityCompat.shouldShowRequestPermissionRationale(this,
Manifest.permission.RECORD_AUDIO)) {
// Show an explanation to the user *asynchronously* -- don't block
// this thread waiting for the user's response! After the user
// sees the explanation, try again to request the permission.
} else {
// No explanation needed, we can request the permission.
ActivityCompat.requestPermissions(this,
new String[]{Manifest.permission.RECORD_AUDIO},
527);
// MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
// app-defined int constant. The callback method gets the
// result of the request. (In this example I just punched in
// the value 527)
}
...
}
a continuación, proporcionar un método de devolución de llamada en la actividad para la solicitud de permisos :
@Override
public void onRequestPermissionsResult(int requestCode,
String permissions[], int[] grantResults) {
switch (requestCode) {
case 527: {
// If request is cancelled, the result arrays are empty.
if (grantResults.length > 0
&& grantResults[0] == PackageManager.PERMISSION_GRANTED) {
// permission was granted, yay! Do the
// contacts-related task you need to do.
} else {
// permission denied, boo! Disable the
// functionality that depends on this permission.
}
return;
}
// other 'case' lines to check for other
// permissions this app might request
}
}
Una otra cosa tengo que cambiar en el código de ejemplo de Preetha por encima de donde el texto resultante se recupera en las onResults (método). Para obtener el texto real de la voz traducida (en lugar del tamaño, como se imprime el código original), o bien imprima el valor de str de cadena construida u obtenga uno de los valores de retorno en ArrayList (datos). Por ejemplo:
.setText(data.get(0));
escribí una aplicación de prueba tratando de poner en marcha SpeechRecognizer.startListening() junto con métodos de detección implementadas, no pasó nada. –