android - programming - ActivityNotFoundException: no se encontrĂ³ actividad para manejar Intent(RECOGNIZE_SPEECH)
speech recognition engine android (2)
Intento crear una aplicación con el reconocedor de voz. Esta es una parte de mi código:
public class Habla extends Activity{
private static int code = 123;
...
public void escuchar()
{
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL, languageModel);
intent.putExtra(RecognizerIntent.EXTRA_MAX_RESULTS, numberResults);
startActivityForResult(intent, code);
}
...
}
El error es el siguiente:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.speech.action.RECOGNIZE_SPEECH (has extras) }
¿Por que sucede? .Habla es una clase que se ejecuta presionando un botón en .MainActivity, por lo que el AndoridManifest es:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.emiliomorillanieto.practica3" >
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".Habla"
android:parentActivityName=".MainActivity" >
<meta-data
android:name="android.support.PARENT_ACTIVITY"
android:value=".MainActivity" />
</activity>
</application>
</manifest>
Debería verificar si una aplicación de reconocimiento está instalada primero:
PackageManager manager = context.getPackageManager();
List<ResolveInfo> infos = manager.queryIntentActivities(intent, 0);
if (infos.size() > 0) {
//Then there is application can handle your intent
}else{
//No Application can handle your intent
}
El motivo es que falta la aplicación de búsqueda por voz de google en el dispositivo que está utilizando. Puede resolver el problema instalándolo manualmente en su dispositivo. Pero hay otra manera de hacerlo. Eso es abrir el enlace de la aplicación en una vista web como sigue
try{
Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Speech recognition demo");
startActivityForResult(intent, VOICE_RECOGNITION_REQUEST_CODE);.
}
catch(ActivityNotFoundException e)
{
Intent your_browser_intent = new Intent(Intent.ACTION_VIEW,
Uri.parse("https://market.android.com/details?id=APP_PACKAGE_NAME"));
startActivity(your_browser_intent);
}
También puede hacerlo codificando y no utilizando webview, pero eso es un trabajo enorme y necesita escribir un montón de código. Entonces, creo que usar una vista web está bastante bien.