package com.nova.brain.glass;
import com.blankj.utilcode.util.Utils;
import com.nova.brain.glass.helper.AsrHelper;
import com.nova.brain.glass.helper.OfflineCmdServiceHelper;
import com.nova.brain.glass.repository.HeaderInterceptor;
import com.rokid.security.glass3.open.sdk.GlassSdk;
import com.rokid.security.glass3.open.sdk.client.IServiceConnectionCallback;
import com.xuqm.base.App;
import com.xuqm.base.di.component.AppComponent;
import com.xuqm.base.di.manager.HttpManager;
/**
* 应用全局入口。
*
*
负责以下初始化工作:
*
* - 为不同服务域名各自创建独立的 {@link AppComponent},避免 OkHttp 连接池跨域名串用。
* - 绑定 Rokid Glass SDK 安全服务;连接成功后顺序初始化离线关键词和在线语音模块。
*
*
* 各 AppComponent 对应关系:
*
* - {@code appComponent} — 主后台(任务中心、决策中心、审阅等核心接口)
* - {@code appComponent1} — 意图识别服务(将 ASR 文本映射为页面导航动作)
* - {@code appComponent2} — 喷涂质检服务(拍照上传、OCR 识别、结果保存)
* - {@code appComponent3} — 单证检验服务(文件验证、质检判定、任务完成)
*
*
* @author xuqm
*/
public class MyApplication extends App {
// 意图识别服务的 Dagger 网络组件
public static AppComponent appComponent1;
// 喷涂质检服务的 Dagger 网络组件
public static AppComponent appComponent2;
// 单证检验服务的 Dagger 网络组件
public static AppComponent appComponent3;
@Override
public void onCreate() {
super.onCreate();
// 为每个域名单独构建 OkHttpClient + Retrofit 实例,互不干扰
appComponent = HttpManager.getAppComponent("http://22fs132201.imwork.net", new HeaderInterceptor(getApplicationContext()));
appComponent1 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext()));
appComponent2 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext()));
appComponent3 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext()));
// appComponent = HttpManager.getAppComponent(BuildConfig.API_BASE_URL_1, new HeaderInterceptor(getApplicationContext()));
// appComponent1 = HttpManager.getAppComponent(BuildConfig.API_BASE_URL_2, new HeaderInterceptor(getApplicationContext()));
// appComponent2 = HttpManager.getAppComponent(BuildConfig.API_BASE_URL_3, new HeaderInterceptor(getApplicationContext()));
// appComponent3 = HttpManager.getAppComponent(BuildConfig.API_BASE_URL_4, new HeaderInterceptor(getApplicationContext()));
initSdk();
}
@Override
public boolean showLog() {
return super.showLog();
}
/**
* 绑定 Rokid Glass 安全服务。
*
* Glass SDK 需要通过系统 AIDL 服务完成硬件鉴权,绑定成功后才能使用离线关键词和相机等能力。
* 离线关键词({@link OfflineCmdServiceHelper})和在线语音({@link AsrHelper})必须在此回调中初始化,
* 否则底层 SDK 尚未就绪,调用会静默失败。
*/
void initSdk() {
// SDK 已就绪时无需重复绑定(进程保活场景下可能触发)
if (GlassSdk.isReady()) {
return;
}
GlassSdk.bindSecurityService(Utils.getApp(), new IServiceConnectionCallback() {
@Override
public void onServiceConnected() {
// 先注册离线关键词,再初始化在线语音(ASR 唤醒词依赖离线服务)
OfflineCmdServiceHelper.INSTANCE.init();
AsrHelper.INSTANCE.init();
}
@Override
public void onServiceDisconnected() {
// 系统服务断开,硬件能力暂时不可用,等待系统自动重连
}
@Override
public void onBindingDied() {
// Binder 死亡(通常是系统进程崩溃),需要重新绑定;当前版本依赖系统自恢复
}
});
}
}