Java中是否有任何方法可以检测Android设备是否安装了脱机语音识别语言,以及它是否不会提示用户下载该语言?
我知道您可以要求语音对文本以选择脱机语音对文本,但您如何知道设备是否安装了该语言?
这个问题不是关于如何使用脱机语音,这是可行的。问题是“如何从Java应用程序代码中检测和下载/安装脱机语音语言”。i、 e.让应用程序检测他们是否安装了离线德语,如果没有,则提示用户下载/安装。
要检测所需语言(德语)是否可用,请执行以下操作:
>
迭代区域设置列表并检查区域设置是否可用于德语。
如果您没有得到任何Locale对象作为回报,您可以断定德语离线不可用。然后您可以编写代码来下载和做其他事情。
我为我的项目做了以下实现。希望下面的代码能帮助你!!!
private TextToSpeech t1;
private void setForOtherLangAudio() {
Locale[] locales = Locale.getAvailableLocales();
Locale loc = null;
for (Locale locale : locales) {
// Replace XXX with your German codes
if (locale.getDisplayCountry().equals("XXX") && locale.getDisplayLanguage().equals("XXX")) {
loc = locale ;
break;
}
}
final Locale germanLocale = loc;
t1 = new TextToSpeech(getContext(), new TextToSpeech.OnInitListener() {
@Override
public void onInit(int status) {
if (status != TextToSpeech.ERROR) {
t1.setLanguage(germanLocale);
}
}
});
}
这不是你所希望的答案,因为在撰写本文时,我不认为有一个直接的解决方案。我非常希望被证明是错的。
很久以前,我就请求了一个增强功能,以编程方式提供此信息-在这里
这一增强建议增加一个参数RecognizerIntent。支持的额外\u脱机\u语言:
以以下方式添加和使用它肯定是微不足道的:
final Intent vrIntent = new Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS);
getContext().sendOrderedBroadcast(vrIntent, null, new BroadcastReceiver() {
@Override
public void onReceive(final Context context, final Intent intent) {
final ArrayList<String> vrStringLocales = intent.getExtras().getStringArrayList(
RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES);
// This would be nice
final ArrayList<String> vrStringOfflineLocales = intent.getExtras().getStringArrayList(
RecognizerIntent.EXTRA_SUPPORTED_OFFLINE_LANGUAGES);
}
}, null, 1234, null, null);
唉,这从未发生过。
您还有另外两个选项可以尝试优雅地处理此问题。
如果应用程序以root权限运行,则可以检查数据/数据/com的位置。谷歌。Androidgooglequicksearchbox/app\u g3\u models/包含脱机文件,可以很方便地根据其区域设置进行标记。
第二种方法是知道用户何时需要提示来安装丢失的脱机文件。
根据我的经验,Speech识别器的识别错误。ERROR_SERVER
最常表示这一点,但并不是万无一失的。
@Override
public void onError(final int error) {
switch (error) {
case SpeechRecognizer.ERROR_SERVER:
// TODO - prompt to install offline files
break;
}
}
当检测到时,您可以将用户引导到正确的安装屏幕。
public static final String PACKAGE_NAME_GOOGLE_NOW = "com.google.android.googlequicksearchbox";
public static final String ACTIVITY_INSTALL_OFFLINE_FILES = "com.google.android.voicesearch.greco3.languagepack.InstallActivity";
public static boolean showInstallOfflineVoiceFiles(@NonNull final Context ctx) {
final Intent intent = new Intent();
intent.setComponent(new ComponentName(PACKAGE_NAME_GOOGLE_NOW, ACTIVITY_INSTALL_OFFLINE_FILES));
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
try {
ctx.startActivity(intent);
return true;
} catch (final ActivityNotFoundException e) {
} catch (final Exception e) {
}
return false;
}
使用这样的硬编码值当然不理想,但这种情况也不理想!
一旦你搞乱了以上所有的事情,并且认为你有一个很好的临时解决方案——再想想!无论用户是否正确安装了丢失的脱机文件,它很可能仍然无法工作。。。。。
我在这里的回答描述了我仍然需要指导用户的过程。这很令人沮丧。
最后,还要向mix-RecognitionListener添加一个bug。当没有错误时,可以抛出onError(int)。请从这里的答案中查看我的要点,以使用BugRecognitionListener,这样您就可以检查回调是否按正确的顺序发送,并忽略那些没有按正确顺序发送的回调。尽管我的答案建议在以前的版本中进行修复,但这仍然是一个问题。
上面的内容应该会让你很忙!祝你好运......
有人能帮我吗? 我正在开发一个通过RecognizerIntent进行语音识别的应用程序。 哪一个Android版本正式带来了API对应用程序的离线识别?有什么声明吗 据我所知,如果语音识别将通过在线服务或离线词典完成,开发人员无法选择。我说得对吗?或者是否有任何记录在案的API可以脱机设置 谢谢
我已经在Python语音识别方面工作了一个多月,制作了一个类似JARVIS的助手。我将语音识别模块与Google语音API和Pocketsphinx一起使用,并且直接使用了Pocketsphinx,没有使用其他模块。虽然识别是准确的,但我很难处理这些软件包处理语音所需的大量时间。它们的工作方式似乎是从一个静默点记录到另一个静默点,然后将记录传递到STT引擎。在录制过程中,无法录制其他声音以进行识别
我正在寻找一个Android语音识别库。我只需要它来理解“是/否”的答案(用不同的语言,如英语、德语、法语)。 有什么建议吗?
[可能重复]但我没有找到下面问题的答案。 在过去的两天里,我一直在做一些语音识别方面的研究,但我的问题没有得到答案: 是否可以将语音识别作为一项服务运行?我想实现这样的功能:虽然我的手机处于睡眠模式,但我需要拨打一个号码
我想开发一个模块,它将使用Android中的语音到文本支持。我发现了许多与RecogenerIntent等相关的文档和演示。但我发现所有这些演示都只是在10秒左右的时间里播放声音。但我想让我的演示运行5-10分钟以上。如果不是离线运行,我不会有任何问题,因为我的应用程序总是在线运行。 我也看过Android上的Pocketsphinx,但效果不太好。此外,它只支持Android Studio,而不
我想制作一个语音识别器应用程序来转录用户的语音。我不想在这样做的时候有任何对话,所以是不可能的。(我知道如果我使用这种方法,我可以获得音频) 我正在使用SpeechRecognitor,并调用startListening来收听用户的音频。我在onResults中得到了非常准确的结果。 现在,我还需要在我的设备SD卡中存储用户的音频。为此,我尝试了MediaRecorder和AudioRecord,