c-brain-glass/app/src/main/java/com/nova/brain/glass/MyApplication.java

99 行
4.3 KiB
Java

2026-04-13 19:34:58 +08:00
package com.nova.brain.glass;
2026-04-13 16:37:34 +08:00
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;
2026-04-13 16:37:34 +08:00
import com.xuqm.base.App;
import com.xuqm.base.di.component.AppComponent;
2026-04-13 16:37:34 +08:00
import com.xuqm.base.di.manager.HttpManager;
/**
* 应用全局入口
*
* <p>负责以下初始化工作
* <ol>
* <li>为不同服务域名各自创建独立的 {@link AppComponent}避免 OkHttp 连接池跨域名串用</li>
* <li>绑定 Rokid Glass SDK 安全服务连接成功后顺序初始化离线关键词和在线语音模块</li>
* </ol>
*
* <p> AppComponent 对应关系
* <ul>
* <li>{@code appComponent} 主后台任务中心决策中心审阅等核心接口</li>
* <li>{@code appComponent1} 意图识别服务 ASR 文本映射为页面导航动作</li>
* <li>{@code appComponent2} 喷涂质检服务拍照上传OCR 识别结果保存</li>
* <li>{@code appComponent3} 单证检验服务文件验证质检判定任务完成</li>
* </ul>
*
2026-04-13 16:37:34 +08:00
* @author xuqm
*/
public class MyApplication extends App {
// 主后台服务地址(通过内网穿透暴露到公网)
public static String baseUrl = "http://22fs132201.imwork.net";
// public static String baseUrl = BuildConfig.API_BASE_URL_1;
// 意图识别服务的 Dagger 网络组件
public static AppComponent appComponent1;
// 喷涂质检服务的 Dagger 网络组件
public static AppComponent appComponent2;
// 单证检验服务的 Dagger 网络组件
public static AppComponent appComponent3;
2026-04-13 16:37:34 +08:00
@Override
public void onCreate() {
super.onCreate();
// 为每个域名单独构建 OkHttpClient + Retrofit 实例,互不干扰
2026-04-13 16:37:34 +08:00
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(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()));
2026-04-13 16:37:34 +08:00
initSdk();
2026-04-13 16:37:34 +08:00
}
@Override
public boolean showLog() {
return super.showLog();
}
/**
* 绑定 Rokid Glass 安全服务
*
* <p>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 死亡(通常是系统进程崩溃),需要重新绑定;当前版本依赖系统自恢复
}
});
}
2026-04-13 16:37:34 +08:00
}