跳到内容 跳到主导航 跳到页脚

分场景语音

机器人在OPK系统中,语音系统是分场景使用的,不同的opk有不同的appid,每个opk中可注册不同的场景(path),让某些语音只在指定的app、path中生效。现在机器人APK也支持分场景使用语音系统了,同时招财豹进行APK开发时,强制使用分场景语音,2个传值建议写公司缩写,同时联系售前对该企业ID进行白名单加白。

为支持在APK开发时分场景使用,我们在skillApi中集成了一系列指定appid、path的操作方法,具体如下:

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//指定并初始化某个appid
mSkillApi.onCreate(SPEECH_APPID);
//指定appid的版本号
mSkillApi.setVersion(SPEECH_APPID, SPEECH_VERSION);
//指定当前appid和场景
mSkillApi.setPath(SPEECH_APPID,SPEECH_DEFAULT_PATH);
//指定当前appid处于前台状态(工作状态)
mSkillApi.onForeground(SPEECH_APPID);
//指定当前appid处于后台状态(暂停工作状态)
mSkillApi.onBackground(SPEECH_APPID);
//指定退出某个appid,退出后如需再次使用,重新create
mSkillApi.onDestroy(SPEECH_APPID);
//当状态混乱不清,使用它重置状态,随后从create重新开始
mSkillApi.resetNlpState();
//指定并初始化某个appid mSkillApi.onCreate(SPEECH_APPID); //指定appid的版本号 mSkillApi.setVersion(SPEECH_APPID, SPEECH_VERSION); //指定当前appid和场景 mSkillApi.setPath(SPEECH_APPID,SPEECH_DEFAULT_PATH); //指定当前appid处于前台状态(工作状态) mSkillApi.onForeground(SPEECH_APPID); //指定当前appid处于后台状态(暂停工作状态) mSkillApi.onBackground(SPEECH_APPID); //指定退出某个appid,退出后如需再次使用,重新create mSkillApi.onDestroy(SPEECH_APPID); //当状态混乱不清,使用它重置状态,随后从create重新开始 mSkillApi.resetNlpState();
//指定并初始化某个appid
mSkillApi.onCreate(SPEECH_APPID);
//指定appid的版本号
mSkillApi.setVersion(SPEECH_APPID, SPEECH_VERSION);
//指定当前appid和场景
mSkillApi.setPath(SPEECH_APPID,SPEECH_DEFAULT_PATH);
//指定当前appid处于前台状态(工作状态)
mSkillApi.onForeground(SPEECH_APPID);
//指定当前appid处于后台状态(暂停工作状态)
mSkillApi.onBackground(SPEECH_APPID);
//指定退出某个appid,退出后如需再次使用,重新create
mSkillApi.onDestroy(SPEECH_APPID);
//当状态混乱不清,使用它重置状态,随后从create重新开始
mSkillApi.resetNlpState();

由于APK开发中,并不像opk开发时每个appid对应一个机器人插件,所以如何定义appid的作用域取决于开发者自己,例如在分场景使用语音的demo apk中,我们定义整个app都使用一个appid不会切换,而activity的生命周期状态用来控制语音状态机的转化。于是我们写了如下代码来控制它(这部分代码在SkillApiHelper中可以找到)

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
package com.ainirobot.robotos.application;
import android.os.Build;
import com.ainirobot.coreservice.client.speech.SkillApi;
public class SkillApiHelper {
//APPID是申请注册的APPID,也即使申请的opk的appid。
private static final String SPEECH_APPID = "xxx";
//在接待后台注册的场景,语音会在正确的appi的中某个场景中生效
private static final String SPEECH_DEFAULT_PATH = "yyyy";
//在接待后台注册的版本号,没有实际的opk填1.0.0
private static final String SPEECH_VERSION = "1.0.0";
private static SkillApi mSkillApi;
public static void setSkillApi(SkillApi skillApi)
{
mSkillApi = skillApi;
}
public static void startApp()
{
if(mSkillApi != null){
mSkillApi.onCreate(SPEECH_APPID);
mSkillApi.setVersion(SPEECH_APPID, SPEECH_VERSION);
mSkillApi.setPath(SPEECH_APPID,SPEECH_DEFAULT_PATH);
mSkillApi.onForeground(SPEECH_APPID);
}
}
public static void moveToForeground()
{
if(mSkillApi != null){
mSkillApi.onForeground(SPEECH_APPID);
}
}
public static void moveToBack()
{
if(mSkillApi != null){
mSkillApi.onBackground(SPEECH_APPID);
}
}
public static void destroyApp(){
if(mSkillApi != null){
mSkillApi.onDestroy(SPEECH_APPID);
}
}
public static void setAppPath(String path){
if(mSkillApi != null){
mSkillApi.setPath(SPEECH_APPID,path);
}
}
public static void reset(){
if(mSkillApi != null){
mSkillApi.resetNlpState();
}
}
}
package com.ainirobot.robotos.application; import android.os.Build; import com.ainirobot.coreservice.client.speech.SkillApi; public class SkillApiHelper { //APPID是申请注册的APPID,也即使申请的opk的appid。 private static final String SPEECH_APPID = "xxx"; //在接待后台注册的场景,语音会在正确的appi的中某个场景中生效 private static final String SPEECH_DEFAULT_PATH = "yyyy"; //在接待后台注册的版本号,没有实际的opk填1.0.0 private static final String SPEECH_VERSION = "1.0.0"; private static SkillApi mSkillApi; public static void setSkillApi(SkillApi skillApi) { mSkillApi = skillApi; } public static void startApp() { if(mSkillApi != null){ mSkillApi.onCreate(SPEECH_APPID); mSkillApi.setVersion(SPEECH_APPID, SPEECH_VERSION); mSkillApi.setPath(SPEECH_APPID,SPEECH_DEFAULT_PATH); mSkillApi.onForeground(SPEECH_APPID); } } public static void moveToForeground() { if(mSkillApi != null){ mSkillApi.onForeground(SPEECH_APPID); } } public static void moveToBack() { if(mSkillApi != null){ mSkillApi.onBackground(SPEECH_APPID); } } public static void destroyApp(){ if(mSkillApi != null){ mSkillApi.onDestroy(SPEECH_APPID); } } public static void setAppPath(String path){ if(mSkillApi != null){ mSkillApi.setPath(SPEECH_APPID,path); } } public static void reset(){ if(mSkillApi != null){ mSkillApi.resetNlpState(); } } }
package com.ainirobot.robotos.application;
import android.os.Build;
import com.ainirobot.coreservice.client.speech.SkillApi;
public class SkillApiHelper {
    //APPID是申请注册的APPID,也即使申请的opk的appid。
    private static final String SPEECH_APPID = "xxx";
    //在接待后台注册的场景,语音会在正确的appi的中某个场景中生效
    private static final String SPEECH_DEFAULT_PATH = "yyyy";
    //在接待后台注册的版本号,没有实际的opk填1.0.0
    private static final String SPEECH_VERSION = "1.0.0";
    private static SkillApi mSkillApi;
    public static void setSkillApi(SkillApi skillApi)
    {
        mSkillApi = skillApi;
    }
    public static void startApp()
    {
        if(mSkillApi != null){
            mSkillApi.onCreate(SPEECH_APPID);
            mSkillApi.setVersion(SPEECH_APPID, SPEECH_VERSION);
            mSkillApi.setPath(SPEECH_APPID,SPEECH_DEFAULT_PATH);
            mSkillApi.onForeground(SPEECH_APPID);
        }
    }
    public static void moveToForeground()
    {
        if(mSkillApi != null){
            mSkillApi.onForeground(SPEECH_APPID);
        }
    }
    public static void moveToBack()
    {
        if(mSkillApi != null){
            mSkillApi.onBackground(SPEECH_APPID);
        }
    }
    public static void destroyApp(){
        if(mSkillApi != null){
            mSkillApi.onDestroy(SPEECH_APPID);
        }
    }
    public static void setAppPath(String path){
        if(mSkillApi != null){
            mSkillApi.setPath(SPEECH_APPID,path);
        }
    }
    public static void reset(){
        if(mSkillApi != null){
            mSkillApi.resetNlpState();
        }
    }
}

对应的调用点,在MainActivity和RobotOSApplication中可以找到

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
//MainActivity
public class MainActivity extends AppCompatActivity {
...
@Override
protected void onStart() {
super.onStart();
SkillApiHelper.startApp();
}
@Override
protected void onResume() {
super.onResume();
SkillApiHelper.moveToForeground();
}
@Override
protected void onPause() {
super.onPause();
SkillApiHelper.moveToBack();
}
@Override
protected void onStop() {
super.onStop();
SkillApiHelper.destroyApp();
}
...
}
//RobotOSApplication
public class RobotOSApplication extends Application {
...
private void initSkillApi() {
mSkillApi = new SkillApi();
ApiListener apiListener = new ApiListener() {
@Override
public void handleApiDisabled() {
}
/**
* Handle speech service
* 语音服务连接成功,注册语音回调
*/
@Override
public void handleApiConnected() {
mSkillApi.registerCallBack(mSkillCallback);
//设置path和version
SkillApiHelper.setSkillApi(mSkillApi);
SkillApiHelper.startApp();
}
/**
* Disconnect speech service
* 语音服务已断开
*/
@Override
public void handleApiDisconnected() {
}
};
mSkillApi.addApiEventListener(apiListener);
mSkillApi.connectApi(mContext);
}
...
}
//MainActivity public class MainActivity extends AppCompatActivity { ... @Override protected void onStart() { super.onStart(); SkillApiHelper.startApp(); } @Override protected void onResume() { super.onResume(); SkillApiHelper.moveToForeground(); } @Override protected void onPause() { super.onPause(); SkillApiHelper.moveToBack(); } @Override protected void onStop() { super.onStop(); SkillApiHelper.destroyApp(); } ... } //RobotOSApplication public class RobotOSApplication extends Application { ... private void initSkillApi() { mSkillApi = new SkillApi(); ApiListener apiListener = new ApiListener() { @Override public void handleApiDisabled() { } /** * Handle speech service * 语音服务连接成功,注册语音回调 */ @Override public void handleApiConnected() { mSkillApi.registerCallBack(mSkillCallback); //设置path和version SkillApiHelper.setSkillApi(mSkillApi); SkillApiHelper.startApp(); } /** * Disconnect speech service * 语音服务已断开 */ @Override public void handleApiDisconnected() { } }; mSkillApi.addApiEventListener(apiListener); mSkillApi.connectApi(mContext); } ... }
//MainActivity
public class MainActivity extends AppCompatActivity {
...
    @Override
    protected void onStart() {
        super.onStart();
        SkillApiHelper.startApp();
    }
    @Override
    protected void onResume() {
        super.onResume();
        SkillApiHelper.moveToForeground();
    }
    @Override
    protected void onPause() {
        super.onPause();
        SkillApiHelper.moveToBack();
    }
    @Override
    protected void onStop() {
        super.onStop();
        SkillApiHelper.destroyApp();
    }
...
}
//RobotOSApplication
public class RobotOSApplication extends Application {
...
private void initSkillApi() {
    mSkillApi = new SkillApi();
    ApiListener apiListener = new ApiListener() {
        @Override
        public void handleApiDisabled() {
        }
        /**
         * Handle speech service
         * 语音服务连接成功,注册语音回调
         */
        @Override
        public void handleApiConnected() {
            mSkillApi.registerCallBack(mSkillCallback);
            //设置path和version
            SkillApiHelper.setSkillApi(mSkillApi);
            SkillApiHelper.startApp();
        }
        /**
         * Disconnect speech service
         * 语音服务已断开
         */
        @Override
        public void handleApiDisconnected() {
        }
    };
    mSkillApi.addApiEventListener(apiListener);
    mSkillApi.connectApi(mContext);
}
...
}

Enjoy & Have fun

SkillApiSample.zip

这篇文章是否有帮助?

0