我正在努力调整现有的Android应用程序以在Google Glass上运行,作为概念验证.我想在我的应用程序中使用语音输入来替换当前需要触摸输入的一些功能.
我可以将我的APK部署到谷歌眼镜并运行它没有问题(通过ADB),但一旦它运行,我试过的Android语音识别API都不适用于Glass:
startActivityForResult(new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH));
Run Code Online (Sandbox Code Playgroud)
这会导致在Google Glass上运行时发生ActivityNotFoundException("找不到处理意图的活动")
SpeechRecognizer.IsRecognitionAvailable(context);
Run Code Online (Sandbox Code Playgroud)
这总是在Google Glass上返回false.
我很好奇是否有其他人遇到过这些问题或有任何建议.
虽然测试增加了targetLevel 30后的应用程序,我发现SpeechRecognizer没有提供任何更多,即SpeechRecognizer.isRecognitionAvailable()
总是返回false。
如果我将 targetLevel 设置回 29,而不更改任何其他内容,则它再次可用。这发生在真实设备(Pixel 3a)和模拟器上。
这似乎不是行为改变。Recognizer API 提到的唯一要求是Manifest.permission.RECORD_AUDIO
我在 logcat 中也没有发现任何线索。
我使用Google语音Api v1开发了一款应用
https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang="+ language_code;
并且此链接用于获取响应.它工作正常,但从今天起它不起作用.我没有收到该链接的任何回复.任何人都有任何想法?有没有替代链接?请帮忙
protected String doInBackground(Void... params) {
// TODO Auto-generated method stub
String urlString = "https://www.google.com/speech-api/v2/recognize?xjerr=1&client=chromium&lang="
+ language_code;
// String urlString = "https://www.google.com/speech-api/v2/recognize? output=json&lang="+language_code+"s&key=AIzaSyCnl6MRydhw_5fLXIdASxkLJzcJh5iX0M4";
// Log.e("SpeechRecognizer url : ", urlString);
// String urlString =
// "https://www.google.com/speech-api/v1/recognize?xjerr=1&client=speech2text&lang="
// + language_code;
URL url;
try {
Log.e("", "started speech to text");
FLAC_FileEncoder fileEncoder = new FLAC_FileEncoder();
File inputfile = new File(Environment.getExternalStorageDirectory()
.getPath() + "/SpeechLibrary/speech.wav");
File outputfile = new File(Environment
.getExternalStorageDirectory().getPath()
+ "/SpeechLibrary/speech.flac");
fileEncoder.encode(inputfile, outputfile);
url = new URL(urlString);
HttpURLConnection con …
Run Code Online (Sandbox Code Playgroud) android speech-recognition google-api speech-to-text android-speech-api
我有一个测试应用程序,它以连续的方式使用Google语音,并且每次调用Google识别服务时都会发出哔声.我试图摆脱哔哔声.我已经读过静音音乐流的线程,但这对我不起作用.
我试图找到蜂鸣声文件的位置,所以我可以去系统中删除它.我按照这个线程,但我在5.0系统文件中看不到该文件.
android speech-recognition voice-recognition android-speech-api google-voice-search
Android在这里有一个很好的文档识别API .现在,如果我计划将其集成到我的应用程序中,我想知道我可以使用Speech API对Google服务器发出的API调用/请求的限制.
这是商业上免费使用还是谷歌提供相同的使用计划.有谁知道定价等?
如果您仅使用Speech API for Android,请与我们联系.
正如标题所暗示的那样,SpeechRecognizer.isRecognitionAvailable()
在 Android 11 中返回 false,我不确定为什么会这样,因为设备 (Pixel 3 XL) 可以识别语音。该文档并未表明它在 API v30 中发生了变化。奇怪的是,即使isRecognitionAvailable
是false ,我仍然成功获得STT提示。下面是说明这一点的示例代码。为什么 isRecognitionAvailable 检查总是错误的?无论如何,代码都不完整,但我添加了重要的相关部分:
AndroidManifest.xml
...
<uses-permission android:name="android.permission.RECORD_AUDIO" />
...
Run Code Online (Sandbox Code Playgroud)
MainActivity.kt
...
override fun onCreate(savedInstanceState: Bundle?) {
...
if(ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
if(shouldShowRequestPermissionRationale(Manifest.permission.RECORD_AUDIO)) { //rationale prompt
}
val requestPermissionLauncher = registerForActivityResult(ActivityResultContracts.RequestPermission()
){ isGranted: Boolean ->
if(isGranted) { checkSTT() }
else { //error perms not granted
}
requestPermissionLauncher.launch(Manifest.permission.RECORD_AUDIO)
} else { checkSTT() }
}
private fun checkSTT() {
if(SpeechRecognizer.isRecognitionAvailable(this)) { runSTT() }
else …
Run Code Online (Sandbox Code Playgroud) 我使用以下操作查询语音服务支持的语言RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS
:
val intent = Intent(RecognizerIntent.ACTION_GET_LANGUAGE_DETAILS)
packageManager.queryBroadcastReceivers(intent, 0).map { resolveInfo ->
sendOrderedBroadcast(
intent.apply {
component = ComponentName(resolveInfo.activityInfo.applicationInfo.packageName, resolveInfo.activityInfo.name)
},
null,
object : BroadcastReceiver() {
override fun onReceive(context: Context?, intent: Intent?) {
val extras = getResultExtras(true)
val supportedLanguages = extras.getStringArrayList(RecognizerIntent.EXTRA_SUPPORTED_LANGUAGES)
// supportedLanguages is empty on Android 13 for all services
}
},
null, Activity.RESULT_OK, null, null
)
}
Run Code Online (Sandbox Code Playgroud)
这在 Android 12 及更低版本上运行良好。但是,Android 13 上的列表为空。我正在使用 Google 语音服务/Google 应用程序。
经过一番挖掘后,似乎之前返回语言的广播接收器被简单地禁用了。来自Google App的反编译源:
values/bools.xml
<bool name="speech_services_enabled">true</bool>
Run Code Online (Sandbox Code Playgroud)
values-v33/bools.xml
<bool name="speech_services_enabled">false</bool>
Run Code Online (Sandbox Code Playgroud)
还有其他方法可以获取支持的语言列表吗?
编辑:我也尝试直接查询SpeechRecognizer
: …