Java 获取Android';s官方语音热词检测开始工作
注意:我在下面说我有一部安卓5.0手机,但这不正确。应该编写5.1(更具体地说,5.1.1,在OnePlus X上) 我一直在尝试在我的应用程序中安装一个热词检测器(Android的官方检测器)(借助于此:),但我在这方面遇到了一些问题。其中一个(目前我认为它是主要的)是Java 获取Android';s官方语音热词检测开始工作,java,android,speech-recognition,voice-recognition,google-speech-api,Java,Android,Speech Recognition,Voice Recognition,Google Speech Api,注意:我在下面说我有一部安卓5.0手机,但这不正确。应该编写5.1(更具体地说,5.1.1,在OnePlus X上) 我一直在尝试在我的应用程序中安装一个热词检测器(Android的官方检测器)(借助于此:),但我在这方面遇到了一些问题。其中一个(目前我认为它是主要的)是mainteractionservice的onReady()从未被调用,我也不知道为什么 我的应用程序作为系统安装,并具有访问所有权限。另外,我在这个存储库的帮助下,正在使用内部和隐藏的Android API编译它:,这样我也可
mainteractionservice的onReady()
从未被调用,我也不知道为什么
我的应用程序作为系统安装,并具有访问所有权限。另外,我在这个存储库的帮助下,正在使用内部和隐藏的Android API编译它:,这样我也可以访问那些“秘密”东西哈哈(比如getKeyphraseEnrollmentInfo()
方法)
一个问题可能是我在棒棒糖5.0(API 21)上尝试这个,有些东西需要API 23(棉花糖),但这只是在MainInteractionSession
(我将在稍后讨论这一点)和TestInteractionActivity
上进行的,我对加载它的行进行了注释(用于测试-看看我是否可以准备好()所以应该没有问题(?)。但是,当从VoiceInteractionMain
调用MainInteractionService
时,仍然不会调用onReady()
如果有帮助,我还删除了名称中包含会话的两个文件。原因是MainInteractionSession
有太多错误,我无法修复它们。我不知道该怎么做。我也可以说我是Android的初学者(或多或少-但我不太明白如何让这些东西工作)。这就是原因吗?但是我没有看到调用MainInteractionSessionService
(调用MainInteractionSession
——有很多错误的那个)。我看不到任何呼叫,也没有任何广播公司或其他会让系统呼叫该服务的东西
如果我能改正错误,我仍然不能在棒棒糖上吃这个,因为有些东西需要棉花糖(我认为这是在棒棒糖5上……??网址中间有“5.0.0”),但这是另一回事。我会买一部更新的手机,这样我就可以在那里测试了。但首先,我需要修复所有的东西,如果它们真的需要修复,所有这些工作
所以这里至少有两个问题:
- 如果我似乎拥有所有权限和内容,为什么从来没有调用过
onReady()
- 如果有人能够修复
MainInteractionSession
上的错误,如果你能发布如何修复或修复的代码,那就太酷了,因为我似乎不知道如何修复它。甚至自2014年以来,onCreate()
都发生了变化,这个东西需要一个来自onCreate()
调用者的包,而这个函数甚至没有那个参数了。。。[修复-->更新]
PS:如果有任何帮助,我已经让语音注册应用程序开始工作()。至少我可以“注册”,但我真的不知道那有什么用。我没有错误。我只是复制粘贴了代码,所有的工作都没有改变任何东西(只是在清单中弄乱了,因为它过时了,应用程序无法启动)
EDIT:我刚刚发现最后一个API,上面写的所有API都是API 22。从API 23开始,方法的更改如上文所述。我试着使用API 21中的android.jar和隐藏/内部API来编译这个,但是这会导致资源错误,所以我可能不会麻烦-我真的不知道如何解决这个问题,我也不会使用谷歌搜索,因为我的新手机有安卓8.1,而不是棒棒糖。。。我更喜欢使用更新的API来实现这一点
更新:忘记第二个问题。刚刚修复了所有的错误。毕竟,这并不难。我所要做的就是右键单击该方法,转到声明,让它在API 22上打开。然后切换到API 29,继续Android开发人员寻找具有相同描述但名称不同的方法。在那之后,我在不禁用任何活动或服务的情况下编译了这个东西。虽然。。。仍然没有调用onReady()。如果有人知道原因,我将不胜感激——除非是因为我在吃棒棒糖,但我要到一个月后才能确定(尽管我认为这不是问题)
更新2:我想我可能已经发现了问题(或者至少是一个问题)。来自Android开发者():
- “用户选择的当前语音交互服务始终由系统运行(…)”李>
- “检查给定的服务组件是否为当前活动的VoiceInteractionService。”-来自
isActiveService()
我从来没选过任何东西。。。!?如何选择此选项?有人知道吗?我必须编辑一些系统文件吗?也许是我在安卓设置中从未见过的设置
那是关于可访问性还是什么?也许我需要把它作为某种可访问性应用程序/服务/我需要在那里激活的东西?还是更高级的东西
编辑:正如这个答案所说(),我需要进入设置、语言和输入、语音输入,然后选择应用程序。但是,似乎什么也不做,因为仍然没有调用onReady()
更新3:回到这里有一段时间了,意识到可能有人调用了onReady(),但在另一个过程中,我不知道这一点(我现在更喜欢Android开发)。因此,假设它一直被调用(我现在看到它被调用),我现在在清单上定义的interactior
过程中得到一些其他错误:
05-06 00:53:24.022 9322-9322/com.android.test.voiceinteraction W/KeyphraseEnrollmentInfo: com.android.test.voiceinteraction does not require MANAGE_VOICE_KEYPHRASES
05-06 00:53:24.022 9322-9322/com.android.test.voiceinteraction I/MainInteractionService: Creating com.android.test.voiceinteraction.MainInteractionService@fbadcac
05-06 00:53:24.022 9322-9322/com.android.test.voiceinteraction I/MainInteractionService: Keyphrase enrollment error? No suitable enrollment application found
05-06 00:53:24.022 9322-9322/com.android.test.voiceinteraction I/MainInteractionService: Keyphrase enrollment meta-data: null
05-06 00:53:24.022 9322-9322/com.android.test.voiceinteraction W/KeyphraseEnrollmentInfo: Enrollment application doesn't support keyphrases
05-06 00:53:24.029 9322-9322/com.android.test.voiceinteraction I/MainInteractionService: onAvailabilityChanged(-2)
05-06 00:53:24.029 9322-9322/com.android.test.voiceinteraction I/MainInteractionService: Hotword availability = -2
05-06 00:53:24.029 9322-9322/com.android.test.voiceinteraction I/MainInteractionService: STATE_HARDWARE_UNAVAILABLE
上面说我不需要MANAGE_VOICE_关键字短语,但我在清单上需要它,我使用getPackageManager().checkPermission(“android.permission.MANAGE_VOICE_关键字短语”)进行了检查
public KeyphraseEnrollmentInfo(PackageManager pm) {
// Find the apps that supports enrollment for hotword keyhphrases,
// Pick a privileged app and obtain the information about the supported keyphrases
// from its metadata.
List<ResolveInfo> ris = pm.queryIntentActivities(
new Intent(ACTION_MANAGE_VOICE_KEYPHRASES), PackageManager.MATCH_DEFAULT_ONLY);
if (ris == null || ris.isEmpty()) {
// No application capable of enrolling for voice keyphrases is present.
mParseError = "No enrollment applications found";
mKeyphrasePackageMap = Collections.<KeyphraseMetadata, String>emptyMap();
mKeyphrases = null;
return;
}
(...)