Android API21:未调用VoiceInteractionService onReady()

这篇文章主要介绍Android API21:未调用VoiceInteractionService onReady(), 对于目前你搜索查找的问题还是具有很好的参考价值,希望编程之家小编整理的这个内容对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教。

编程之家(jb51.cc)小编说:我对新的 Android API21有疑问,特别是VoiceInteractorService. 我想在API21中使用新的Hotword检测.如果我按下按钮,则应启动“google”一词的热门词检测. 当我有一个Activity(MainActivity)并且我想从VoiceInteractorService调用createAlwaysOnHotwordDetector(String keyph

我对新的 Android API21有疑问,特别是VoiceInteractorService.

我想在API21中使用新的hotword检测.如果我按下按钮,则应启动“google”一词的热门词检测.

我有一个Activity(MainActivity)并且我想从VoiceInteractorService调用createalwaysOnhotwordDetector(String keyphrase,Locale locale,AlwaysOnhotwordDetector.Callback callback)方法时,我收到一个错误java.lang.IllegalStateException:在onReady()之前不可用调用.我尝试使用try catch循环来暂时解决这个问题,以查看何时调用onReady()并且我可以执行createalwaysOnhotwordDetector()方法.我发现即使在让系统循环15分钟之后也永远不会调用onReady().

有人知道如何解决这个问题吗?

提前致谢.

这是我调用VoiceInteractorService的Activity.

import java.util.Locale;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.service.voice.AlwaysOnhotwordDetector;
import android.service.voice.AlwaysOnhotwordDetector.Callback;
import android.service.voice.VoiceInteractionService;
import android.service.voice.AlwaysOnhotwordDetector.EventPayload;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;

public class MainActivity extends Activity {

    Button btn;
    VoiceInteractionService service;
    AlwaysOnhotwordDetector.Callback callback;
    Locale locale = new Locale("nl-NL");
    Context ctx;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        btn = (Button) findViewById(R.id.button1);
        ctx = getApplicationContext();
        service = new VoiceInteractionService();
        btn.setonClickListener(new OnClickListener() {
            // Create hotword detector on button click
            @Override
            public void onClick(View v) {
                service.createalwaysOnhotwordDetector("google",locale,callback);
            }
        });

        callback = new Callback() {

            @Override
            public void onRecognitionResumed() {
                // Todo Auto-generated method stub

            }

            @Override
            public void onRecognitionPaused() {
                // Todo Auto-generated method stub

            }

            @Override
            public void onError() {
                // Todo Auto-generated method stub
                Log.d("error","error");
            }

            @Override
            public void onDetected(EventPayload eventPayload) {
                // Todo Auto-generated method stub
                // display Toast message when hotword is detected
                Toast.makeText(ctx,"Google",Toast.LENGTH_LONG).show();
            }

            @Override
            public void onAvailabilityChanged(int status) {
                // Todo Auto-generated method stub
            }
        };
    }
}

解决方法

VoiceInteractionService旨在进行子类化以创建您自己的语音交互服务.一次只能启用一个这样的服务,就像键盘一样.一旦用户启用它,它就会在任何地方都处于活动状态,而不仅仅是在特定的活动中.

您无法使用VoiceInteractionService为特定活动提供语音识别.

相关文章

Android开发中获得屏幕的宽度和高度还是比较常用的,在网上找...
本次课程表应用功能非常丰富,而且非常实用,可以添加学期的...
Frida-Dexdump 脱壳工具下载使用以及相关技术介绍
实现注册界面的布局效果,包含用户名,密码,忘记密码,登录...
Android App开发实战之实现微信记账本功能(附源码 超详细必...
前言首先看一下小米中的加载动画是怎么样的,恩恩~~~~虽...