首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在运行时,语音交互程序总是返回null

在运行时,语音交互程序总是返回null
EN

Stack Overflow用户
提问于 2020-06-19 11:42:36
回答 1查看 185关注 0票数 0

我试图在我的项目中实现语音交互器,使用它的主要思想是,用户将通过说一个单词(类似于'Ok Google')来调用一个特定的功能,然后应用程序将导航或采取相应的行动。我去了几个教程,发现了这段代码,但是当我尝试实现时,我抛出了运行时异常。请在下面找到我的代码片段,并感谢您的帮助。

报表文件

代码语言:javascript
复制
<?xml version="1.0" encoding="utf-8"?>

代码语言:javascript
复制
<uses-permission android:name="android.permission.RECORD_AUDIO" />

<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:largeHeap="true"
    android:roundIcon="@mipmap/ic_launcher_round"
    android:supportsRtl="true"
    android:theme="@style/AppTheme">
    <activity android:name="com.ivy.ivyvoicebot.MainActivity" >
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />
            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.ivy.ivyvoicebot.MY_ACTION_INTENT" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.VOICE" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.media.action.STILL_IMAGE_CAMERA"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.VOICE"/>
        </intent-filter>
        <intent-filter>
            <action android:name="com.google.android.gms.actions.SEARCH_ACTION"/>
            <category android:name="android.intent.category.DEFAULT"/>
            <category android:name="android.intent.category.VOICE"/>
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="com.google.android.voicesearch.SELF_NOTE" />
        </intent-filter>
    </activity>
</application>

MainActivity.java

代码语言:javascript
复制
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        startVoiceTrigger();
    } else {
        Toast.makeText(this, "Device not supported", Toast.LENGTH_SHORT).show();
    }
}

@RequiresApi(api = Build.VERSION_CODES.M)
private void startVoiceTrigger() {

    VoiceInteractor.PickOptionRequest.Option option1 = new VoiceInteractor.PickOptionRequest.Option("cheese", 1);
    option1.addSynonym("ready");
    option1.addSynonym("go");
    option1.addSynonym("take it");
    option1.addSynonym("ok");

    VoiceInteractor.Prompt prompt = new VoiceInteractor.Prompt("Say Cheese");
    VoiceInteractor voiceInteractor = getVoiceInteractor();
    voiceInteractor.submitRequest(new VoiceInteractor.PickOptionRequest(prompt,
                new VoiceInteractor.PickOptionRequest.Option[]{option1}, null) {
            @Override
            public void onPickOptionResult(boolean finished, Option[] selections, Bundle result) {
                if (finished && selections.length == 1) {
                    Message message = Message.obtain();
                    message.obj = result;
                    Toast.makeText(MainActivity.this, "Navigate To next screen", Toast.LENGTH_SHORT).show();
                } else {
                    getActivity().finish();
                }
            }

            @Override
            public void onCancel() {
                Toast.makeText(MainActivity.this, "Didn't work", Toast.LENGTH_SHORT).show();
                getActivity().finish();
            }
        });
    }
}

错误消息:

代码语言:javascript
复制
2020-06-19 17:02:51.633 23588-23588/com.ivy.ivyvoicebot E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.ivy.ivyvoicebot, PID: 23588
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.ivy.ivyvoicebot/com.ivy.ivyvoicebot.MainActivity}: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.app.VoiceInteractor.submitRequest(android.app.VoiceInteractor$Request)' on a null object reference
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3375)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3514)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2110)
    at android.os.Handler.dispatchMessage(Handler.java:107)
    at android.os.Looper.loop(Looper.java:214)
    at android.app.ActivityThread.main(ActivityThread.java:7697)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950)
 Caused by: java.lang.NullPointerException: Attempt to invoke virtual method 'boolean android.app.VoiceInteractor.submitRequest(android.app.VoiceInteractor$Request)' on a null object reference
    at com.ivy.ivyvoicebot.MainActivity.startVoiceTrigger(MainActivity.java:259)
    at com.ivy.ivyvoicebot.MainActivity.onCreate(MainActivity.java:85)
    at android.app.Activity.performCreate(Activity.java:7815)
    at android.app.Activity.performCreate(Activity.java:7804)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1325)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:3350)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3514) 
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:83) 
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:135) 
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:95) 
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:2110) 
    at android.os.Handler.dispatchMessage(Handler.java:107) 
    at android.os.Looper.loop(Looper.java:214) 
    at android.app.ActivityThread.main(ActivityThread.java:7697) 
    at java.lang.reflect.Method.invoke(Native Method) 
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:516) 
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:950) 
2020-06-19 17:02:51.640 23588-23588/com.ivy.ivyvoicebot I/Process: Sending signal. PID: 23588 SIG: 9

参考链接:

https://codelabs.developers.google.com/codelabs/voice-interaction/index.html?index=..%2F..index#6

https://hub.packtpub.com/voice-interaction-and-android-marshmallow/

https://www.mobindustry.net/how-to-implement-voice-interactions-into-your-android-app/

EN

回答 1

Stack Overflow用户

发布于 2021-02-01 10:35:57

不能直接启动MainActivity。它应该由VoicePrompt启动,只有在这种情况下,VoiceInteractor的实例才是可用的。使用Kotlin中的isLocalVoiceInteractionSupported检查。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62469538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档