我正在尝试使用语音识别器制作应用。这是我的一段代码:
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);
}
...
}
错误如下:
android.content.ActivityNotFoundException: No Activity found to handle Intent { act=android.speech.action.RECOGNIZE_SPEECH (has extras) }
为什么会这样? .Habla是一个按下.MainActivity按钮的类,所以AndoridManifest是:
<?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>
答案 0 :(得分:7)
您应该先检查是否安装了识别应用程序:
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
}
答案 1 :(得分:4)
原因是您正在使用的设备上缺少谷歌的voice search app。您可以通过在设备上手动安装来解决问题。但还有另一种方法可以做到这一点。这是在webview中打开应用程序的链接,如下面的
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);
}
你也可以通过编码而不是使用webview来完成它,但这需要做很多工作,你需要编写一大堆代码。所以,我认为使用webview非常好。
答案 2 :(得分:0)
如果您的设备包含自定义ROM:
下载:Google App.apk [https://www.apkmirror.com/apk/google-inc/google-search/]或.app,如果您已访问Google Play商店。
使用adb命令安装“adb install path_to_apk” [https://developer.android.com/studio/command-line/adb.html?hl=en#move])
如果无效,请同时下载:Google Play Services.apk
我知道这个问题已经超过1年了,但我遇到了机器人问题(使用Android OS 4.4.4 API 19和自定义ROM)并且使用了RecognizerIntent帮了我很多。