2026-04-13 19:34:58 +08:00
|
|
|
|
package com.nova.brain.glass;
|
2026-04-13 16:37:34 +08:00
|
|
|
|
|
2026-04-14 13:58:04 +08:00
|
|
|
|
import com.blankj.utilcode.util.Utils;
|
2026-04-16 22:25:23 +08:00
|
|
|
|
import com.nova.brain.glass.helper.AsrHelper;
|
2026-04-14 13:58:04 +08:00
|
|
|
|
import com.nova.brain.glass.helper.OfflineCmdServiceHelper;
|
2026-04-14 12:49:14 +08:00
|
|
|
|
import com.nova.brain.glass.repository.HeaderInterceptor;
|
2026-04-14 13:58:04 +08:00
|
|
|
|
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;
|
2026-04-16 17:55:38 +08:00
|
|
|
|
import com.xuqm.base.di.component.AppComponent;
|
2026-04-13 16:37:34 +08:00
|
|
|
|
import com.xuqm.base.di.manager.HttpManager;
|
|
|
|
|
|
|
|
|
|
|
|
/**
|
2026-04-21 22:30:53 +08:00
|
|
|
|
* 应用全局入口。
|
|
|
|
|
|
*
|
|
|
|
|
|
* <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 {
|
|
|
|
|
|
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// 主后台服务地址(通过内网穿透暴露到公网)
|
2026-04-18 12:30:04 +08:00
|
|
|
|
public static String baseUrl = "http://22fs132201.imwork.net";
|
2026-04-22 13:43:47 +08:00
|
|
|
|
// public static String baseUrl = BuildConfig.API_BASE_URL_1;
|
2026-04-18 11:04:37 +08:00
|
|
|
|
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// 意图识别服务的 Dagger 网络组件
|
2026-04-18 11:04:37 +08:00
|
|
|
|
public static AppComponent appComponent1;
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// 喷涂质检服务的 Dagger 网络组件
|
2026-04-18 17:05:51 +08:00
|
|
|
|
public static AppComponent appComponent2;
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// 单证检验服务的 Dagger 网络组件
|
2026-04-21 14:40:49 +08:00
|
|
|
|
public static AppComponent appComponent3;
|
2026-04-13 16:37:34 +08:00
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void onCreate() {
|
|
|
|
|
|
super.onCreate();
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// 为每个域名单独构建 OkHttpClient + Retrofit 实例,互不干扰
|
2026-04-13 16:37:34 +08:00
|
|
|
|
appComponent = HttpManager.getAppComponent(baseUrl, new HeaderInterceptor(getApplicationContext()));
|
2026-04-18 12:30:04 +08:00
|
|
|
|
appComponent1 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext()));
|
2026-04-18 17:05:51 +08:00
|
|
|
|
appComponent2 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext()));
|
2026-04-21 14:40:49 +08:00
|
|
|
|
appComponent3 = HttpManager.getAppComponent("https://22v1322u01.vicp.fun", new HeaderInterceptor(getApplicationContext()));
|
2026-04-18 17:05:51 +08:00
|
|
|
|
|
2026-04-22 13:43:47 +08:00
|
|
|
|
// 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
|
|
|
|
|
2026-04-14 13:58:04 +08:00
|
|
|
|
initSdk();
|
2026-04-13 16:37:34 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public boolean showLog() {
|
|
|
|
|
|
return super.showLog();
|
|
|
|
|
|
}
|
2026-04-14 13:58:04 +08:00
|
|
|
|
|
2026-04-21 22:30:53 +08:00
|
|
|
|
/**
|
|
|
|
|
|
* 绑定 Rokid Glass 安全服务。
|
|
|
|
|
|
*
|
|
|
|
|
|
* <p>Glass SDK 需要通过系统 AIDL 服务完成硬件鉴权,绑定成功后才能使用离线关键词和相机等能力。
|
|
|
|
|
|
* 离线关键词({@link OfflineCmdServiceHelper})和在线语音({@link AsrHelper})必须在此回调中初始化,
|
|
|
|
|
|
* 否则底层 SDK 尚未就绪,调用会静默失败。
|
|
|
|
|
|
*/
|
2026-04-14 13:58:04 +08:00
|
|
|
|
void initSdk() {
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// SDK 已就绪时无需重复绑定(进程保活场景下可能触发)
|
2026-04-14 13:58:04 +08:00
|
|
|
|
if (GlassSdk.isReady()) {
|
|
|
|
|
|
return;
|
|
|
|
|
|
}
|
|
|
|
|
|
GlassSdk.bindSecurityService(Utils.getApp(), new IServiceConnectionCallback() {
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void onServiceConnected() {
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// 先注册离线关键词,再初始化在线语音(ASR 唤醒词依赖离线服务)
|
2026-04-14 13:58:04 +08:00
|
|
|
|
OfflineCmdServiceHelper.INSTANCE.init();
|
2026-04-16 22:25:23 +08:00
|
|
|
|
AsrHelper.INSTANCE.init();
|
2026-04-14 13:58:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void onServiceDisconnected() {
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// 系统服务断开,硬件能力暂时不可用,等待系统自动重连
|
2026-04-14 13:58:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
|
public void onBindingDied() {
|
2026-04-21 22:30:53 +08:00
|
|
|
|
// Binder 死亡(通常是系统进程崩溃),需要重新绑定;当前版本依赖系统自恢复
|
2026-04-14 13:58:04 +08:00
|
|
|
|
}
|
|
|
|
|
|
});
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2026-04-13 16:37:34 +08:00
|
|
|
|
}
|