package com.wmdigit.service; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.content.pm.PackageManager; import android.os.IBinder; import android.os.RemoteException; import com.wmdigit.common.model.ProductsDTO; import com.wmdigit.service.aidl.model.DetectResult; import com.wmdigit.service.listener.OnServiceConnectListener; import java.util.List; /** * WmSdk类,实现了WmSdkInterface接口,提供了与服务端进行通信的功能 * @author dizi */ public class WmSdk implements WmSdkInterface{ /** * 服务包名,用于绑定服务 */ private static final String SERVICE_PACKAGE = "com.wmdigit.cateringdetect"; /** * 服务动作,用于绑定服务 */ private static final String SERVICE_ACTION = "com.wmdigit.service"; /** * WmSdk的单例实例 */ private static WmSdk instance; /** * 获取WmSdk的单例实例 * @return WmSdk的实例 */ public static WmSdk getInstance(){ if (instance == null){ synchronized (WmSdk.class){ if (instance == null){ instance = new WmSdk(); } } } return instance; } /** * 应用程序上下文 */ private Context context; /** * AIDL接口对象 */ private ICateringInterface aidlInterface; /** * 服务连接监听器 */ private OnServiceConnectListener onServiceConnectListener; private boolean isServiceConnected = false; /** * DeathRecipient用于处理aidl接口对象的死亡消息 */ private final IBinder.DeathRecipient deathRecipient = new IBinder.DeathRecipient() { @Override public void binderDied() { if (aidlInterface != null) { aidlInterface.asBinder().unlinkToDeath(this, 0); } } }; /** * ServiceConnection对象,用于处理与服务的连接和断开连接 */ private ServiceConnection serviceConnection = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder service) { isServiceConnected = true; aidlInterface = ICateringInterface.Stub.asInterface(service); // 注册DeathRecipient try { aidlInterface.asBinder().linkToDeath(deathRecipient, 0); } catch (RemoteException e) { e.printStackTrace(); } if (onServiceConnectListener != null){ onServiceConnectListener.onConnected(name, service); } } @Override public void onServiceDisconnected(ComponentName name) { isServiceConnected = false; if (onServiceConnectListener != null){ onServiceConnectListener.onDisconnected(name); } } }; /** * 绑定服务 * @param context 应用程序上下文 * @param listener 服务连接监听器,用于处理服务连接状态的变化 */ @Override public void bindService(Context context, OnServiceConnectListener listener) { this.context = context; this.onServiceConnectListener = listener; Intent intent = new Intent(); intent.setPackage(SERVICE_PACKAGE); intent.setAction(SERVICE_ACTION); context.bindService(intent, serviceConnection, Context.BIND_AUTO_CREATE); } /** * 解绑服务 */ @Override public void unbindService() { if (serviceConnection != null){ context.unbindService(serviceConnection); } } /** * 初始化SDK * @param listener 初始化监听器,用于处理初始化过程中的回调 */ @Override public void init(IOnInitListener listener) { try { aidlInterface.init(listener); } catch (Exception e) { e.printStackTrace(); } } /** * 导入产品数据 * @param products 产品数据列表 */ @Override public void importProducts(List<ProductsDTO> products) { try { aidlInterface.importProducts(products); } catch (Exception e) { e.printStackTrace(); } } /** * 注册检测监听器 * @param generateBitmap 是否生成位图 * @param listener 检测监听器,用于处理检测过程中的回调 */ @Override public void registerDetectionListener(boolean generateBitmap, IOnDetectionListener listener) { try { aidlInterface.registerDetectionListener(generateBitmap, listener); } catch (Exception e) { e.printStackTrace(); } } /** * 取消注册检测监听器 */ @Override public void unregisterDetectionListener() { try { aidlInterface.unregisterDetectionListener(); } catch (Exception e) { e.printStackTrace(); } } /** * 自动检测 * @param generateBitmap 是否生成位图 * @return 检测结果 */ @Override public DetectResult autoDetect(boolean generateBitmap) { DetectResult detectResult = null; try { detectResult = aidlInterface.autoDetect(generateBitmap); } catch (Exception e){ e.printStackTrace(); } return detectResult; } /** * 检查服务应用是否已安装 * * @param context Android上下文,用于访问包管理器以查询应用安装状态 * @return 如果服务应用已安装,则返回true;否则返回false */ @Override public boolean checkServiceAppInstalled(Context context) { try{ // 尝试获取服务应用的包信息 context.getPackageManager().getPackageInfo(SERVICE_PACKAGE, 0); } catch (PackageManager.NameNotFoundException e){ // 如果未找到包,则服务应用未安装 return false; } // 如果成功获取到包信息,则服务应用已安装 return true; } /** * 检查与服务的连接状态 * * @return 如果服务连接已建立,则返回true;否则返回false */ @Override public boolean checkServiceConnected() { // 返回当前的服务连接状态 return isServiceConnected; } /** * 检查激活状态 * @return 激活状态,true表示已激活,false表示未激活 */ @Override public boolean checkActivation() { boolean result = false; try { result = aidlInterface.checkActivation(); } catch (Exception e) { e.printStackTrace(); } return result; } /** * 检查相机裁剪功能 * @return 相机裁剪功能状态,true表示支持,false表示不支持 */ @Override public boolean checkCameraCrop() { boolean result = false; try{ result = aidlInterface.checkCameraCrop(); } catch (Exception e){ e.printStackTrace(); } return result; } /** * 检查学习数据是否已初始化 * @return 学习数据初始化状态,true表示已初始化,false表示未初始化 */ @Override public boolean checkLearningDataInitCompleted() { boolean result = false; try{ result = aidlInterface.checkLearningDataInited(); } catch (Exception e){ e.printStackTrace(); } return result; } /** * 打开设置页面 */ @Override public void openSettingPage() { try { aidlInterface.openSettingPage(); } catch (Exception e) { e.printStackTrace(); } } /** * 重置相机背景 */ @Override public void resetCameraBackground() { try { aidlInterface.resetCameraBackground(); } catch (Exception e) { e.printStackTrace(); } } }