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; /** * 应用全局入口。 * *

负责以下初始化工作: *

    *
  1. 为不同服务域名各自创建独立的 {@link AppComponent},避免 OkHttp 连接池跨域名串用。
  2. *
  3. 绑定 Rokid Glass SDK 安全服务;连接成功后顺序初始化离线关键词和在线语音模块。
  4. *
* *

各 AppComponent 对应关系: *

* * @author xuqm */ public class MyApplication extends App { // 主后台服务地址(通过内网穿透暴露到公网) public static String baseUrl = "http://22fs132201.imwork.net"; // public static String baseUrl = "http://192.168.6.20"; // 意图识别服务的 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(baseUrl, 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())); // appComponent1 = HttpManager.getAppComponent("http://192.168.6.20:12119", new HeaderInterceptor(getApplicationContext())); // appComponent2 = HttpManager.getAppComponent("http://192.168.6.156:10085", new HeaderInterceptor(getApplicationContext())); // appComponent3 = HttpManager.getAppComponent("http://192.168.22.199:8820/", 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 死亡(通常是系统进程崩溃),需要重新绑定;当前版本依赖系统自恢复 } }); } }