App.java 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256
  1. package com.bgy.autosale;
  2. import android.annotation.SuppressLint;
  3. import android.app.ActivityManager;
  4. import android.app.Application;
  5. import android.content.Context;
  6. import android.content.Intent;
  7. import android.content.pm.PackageManager;
  8. import android.content.res.Configuration;
  9. import android.graphics.Typeface;
  10. import android.util.Log;
  11. import com.bgy.autosale.entitys.ContactBean;
  12. import com.bgy.autosale.entitys.Result;
  13. import com.bgy.autosale.helpers.CommunicationHelper;
  14. import com.bgy.autosale.helpers.ErrorViewHelper;
  15. import com.bgy.autosale.helpers.SmallApkHelper;
  16. import com.bgy.autosale.interfaces.Callback;
  17. import com.bgy.autosale.payutil.MQService;
  18. import com.bgy.autosale.plc.BasePlcAgreement;
  19. import com.bgy.autosale.ui.operator.fragments.PriceFragment;
  20. import com.bgy.autosale.utils.CrashHandler;
  21. import com.example.offpay.service.ModuleOffPayInitializer;
  22. import com.example.offpay.wmdb.WeaverUtil;
  23. import com.example.spunsugar.system.model.bean.PriceBean;
  24. import com.example.spunsugar.user.model.bean.GoodsBean;
  25. import com.hboxs.base_library.base.BaseApplication;
  26. import com.hboxs.base_library.base.ModuleInitializer;
  27. import com.hboxs.base_library.constant.Heartbeat;
  28. import com.hboxs.base_library.constant.Name;
  29. import com.hboxs.base_library.constant.ProductAbout;
  30. import com.hboxs.base_library.util.FileUtil;
  31. import com.orhanobut.hawk.Hawk;
  32. import java.lang.reflect.Field;
  33. import java.util.ArrayList;
  34. import java.util.Arrays;
  35. import java.util.List;
  36. import java.util.Locale;
  37. import ZtlApi.ZtlManager;
  38. /**
  39. * create by cjx on 2023/11/14
  40. */
  41. public class App extends BaseApplication {
  42. private static final String TAG = "AppBaseApplication";
  43. public static App app;
  44. // 联系方式加载完成通知
  45. public static final String ACTION_CONTACT_LOAD = "ACTION_CONTACT_LOAD";
  46. // 设备状态变正常通知
  47. public static final String ACTION_DEVICE_NORMAL = "ACTION_DEVICE_NORMAL";
  48. //标记连接状态,防止状态过多上报,界面刷新频繁
  49. private boolean pclDeviceConnected = true;
  50. public String appId = "1429622061189443585";//使用pos的id 做为所有pos合并一个版本的更新id
  51. public String language; // 语言类型
  52. public int mcuVersion = 0;
  53. public boolean unCheckStatus = false;
  54. // 异常信息界面显示的联系方式
  55. public ContactBean contactBean;
  56. // 支付渠道
  57. public int payChannel;
  58. // 运行模式
  59. public int runMode;
  60. public String currencySymbol;
  61. public Locale locale = Locale.CHINA;
  62. @SuppressLint("SdCardPath")
  63. @Override
  64. public void onCreate() {
  65. super.onCreate();
  66. app = this;
  67. //初始化工具库
  68. boolean isMainProcess = getApplicationContext().getPackageName().equals
  69. (getCurrentProcessName());
  70. Log.e("TAG", "start app is main process " + isMainProcess);
  71. if (isMainProcess) {
  72. //用于启动或者安装一个小应用守护当前的应用的
  73. SmallApkHelper.initAndCheckSmallApk(this);
  74. CrashHandler.getsInstance().init(getApplicationContext());
  75. try {
  76. Constant.versionName = getPackageManager().getPackageInfo(getPackageName(), 0).versionName;
  77. } catch (PackageManager.NameNotFoundException e) {
  78. throw new RuntimeException(e);
  79. }
  80. }
  81. Hawk.init(this).build();
  82. if (FileUtil.getDeviceId().length()>10){
  83. Heartbeat.deviceId=FileUtil.getDeviceId();
  84. }
  85. new Thread(new Runnable() {
  86. @Override
  87. public void run() {
  88. initGoodsBean();
  89. // 启动服务
  90. ZtlManager.GetInstance().setContext(getApplicationContext());//屏幕厂家数据初始化
  91. openService();//打开服务
  92. initializeModules();
  93. Log.d("openService", "run: ");
  94. }
  95. }).start();
  96. }
  97. private void initializeModules() {
  98. Log.d("TAG", "initializeModules1: ");
  99. List<Class<? extends ModuleInitializer>> modules = Arrays.asList(
  100. ModuleOffPayInitializer.class
  101. );
  102. Log.d("TAG", "initializeModules2: ");
  103. for (Class<? extends ModuleInitializer> initializerClass : modules) {
  104. try {
  105. ModuleInitializer initializer = initializerClass.newInstance();
  106. initializer.initialize();
  107. } catch (InstantiationException | IllegalAccessException e) {
  108. e.printStackTrace();
  109. }
  110. }
  111. }
  112. private void openMqService() {
  113. //开启MQ
  114. startService(new Intent(this, MQService.class));
  115. }
  116. private void openService() {
  117. openRestService();
  118. openMqService();//打开mq
  119. }
  120. private void openRestService() {
  121. Intent intent = new Intent(this, RemoteSupportService.class);
  122. startService(intent);
  123. }
  124. public void replaceDefaultFont(Context context, String fontPath) {//字体全局替换
  125. try {
  126. Field field = Typeface.class.getDeclaredField("MONOSPACE");
  127. field.setAccessible(true);
  128. field.set(null, Typeface.createFromAsset(context.getAssets(), fontPath));
  129. } catch (Exception e) {
  130. e.printStackTrace();
  131. }
  132. }
  133. /**
  134. * 获取当前进程名
  135. */
  136. private String getCurrentProcessName() {
  137. int pid = android.os.Process.myPid();
  138. String processName = "";
  139. ActivityManager manager = (ActivityManager) getApplicationContext().getSystemService
  140. (Context.ACTIVITY_SERVICE);
  141. for (ActivityManager.RunningAppProcessInfo process : manager.getRunningAppProcesses()) {
  142. if (process.pid == pid) {
  143. processName = process.processName;
  144. }
  145. }
  146. return processName;
  147. }
  148. //监听plc设备状态
  149. public void initDeviceStateListener() {
  150. CommunicationHelper.getInstance().setDeviceStatusListener(new Callback<Result<Boolean>>() {
  151. @Override
  152. public void onResult(Result<Boolean> result) {
  153. switch (result.code) {
  154. case BasePlcAgreement.PLC_HEART_CONNECT:
  155. if (!pclDeviceConnected) {
  156. pclDeviceConnected = true;
  157. ErrorViewHelper.getInstance().hideErrorView(R.string.error_plc_disconnect);
  158. }
  159. break;
  160. case BasePlcAgreement.PLC_HEART_DISCONNECT:
  161. if (pclDeviceConnected) {
  162. pclDeviceConnected = false;
  163. ErrorViewHelper.getInstance().showErrorView(R.string.error_plc_disconnect, new String[]{getString(R.string.error_plc_disconnect), getString(R.string.make_fail_describe)});
  164. }
  165. break;
  166. case BasePlcAgreement.PLC_HEART_REPORT:
  167. if (result.data != null) {
  168. if (result.data) {
  169. ErrorViewHelper.getInstance().hideErrorView(R.string.setting_plc_connect);
  170. } else {
  171. if (result.message != null) {
  172. String[] lastErrorMessage = result.message.split("-");
  173. ErrorViewHelper.getInstance().showErrorView(R.string.setting_plc_connect, lastErrorMessage);
  174. } else {
  175. ErrorViewHelper.getInstance().showErrorView(R.string.setting_plc_connect, new String[]{getString(R.string.error_wait), getString(R.string.make_fail_describe_refund)});
  176. }
  177. }
  178. }
  179. break;
  180. }
  181. }
  182. });
  183. }
  184. public boolean isPlcConnected() {
  185. return pclDeviceConnected;
  186. }
  187. public void killActivities() {
  188. ActivityManager activityManager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
  189. List<ActivityManager.AppTask> appTaskList = activityManager.getAppTasks();
  190. for (ActivityManager.AppTask appTask : appTaskList) {
  191. appTask.finishAndRemoveTask();
  192. }
  193. System.exit(0);
  194. }
  195. public void forceLocale(Locale locale, Context context) {
  196. this.locale = locale;
  197. Configuration conf = context.getResources().getConfiguration();
  198. conf.setLocale(locale);
  199. context.getResources().updateConfiguration(conf, context.getResources().getDisplayMetrics());
  200. Locale.setDefault(locale);
  201. }
  202. //初始化商品数据
  203. private void initGoodsBean() {
  204. boolean contains = Hawk.contains("PRICEBEAN");
  205. //如果不存在 创建默认的
  206. if (!contains) {
  207. ArrayList<PriceFragment.PriceBean> priceBeans = new ArrayList<>();
  208. for (int i = 0; i < PriceFragment.ProductAbout.chineseName.length; i++) {
  209. PriceFragment.PriceBean priceBean = new PriceFragment.PriceBean();
  210. priceBean.setChineseName(PriceFragment.ProductAbout.chineseName[i]);
  211. priceBean.setPriceKey(PriceFragment.ProductAbout.priceKey[i]);
  212. priceBean.setPriceHint(PriceFragment.ProductAbout.priceHint[i]);
  213. priceBeans.add(priceBean);
  214. Log.d(TAG, "PRICEBEANinitGoodsBean: "
  215. + "chinesename:" + PriceFragment.ProductAbout.chineseName[i]
  216. + "priceKey:" + PriceFragment.ProductAbout.priceKey[i]
  217. + "priceHint:" + PriceFragment.ProductAbout.priceHint[i]);
  218. }
  219. Hawk.put("PRICEBEAN", priceBeans);
  220. Log.d(TAG, "initGoodsBean: " + priceBeans);
  221. }
  222. }
  223. }