package com.hdl.photovoltaic; import android.app.Activity; import android.app.ActivityManager; import android.app.Application; import android.content.Context; import android.content.Intent; import android.content.res.Configuration; import android.os.Build; import android.os.LocaleList; import android.os.Process; import android.os.SystemClock; import android.text.TextUtils; import android.util.Log; import androidx.multidex.MultiDex; import com.google.gson.Gson; import com.hdl.hdlhttp.HxHttpConfig; import com.hdl.linkpm.sdk.HDLLinkPMSdk; import com.hdl.linkpm.sdk.user.HDLLinkPMUser; import com.hdl.linkpm.sdk.user.callback.IOnReloginListener; import com.hdl.linkpm.sdk.utils.HDLSDKSPUtils; import com.hdl.photovoltaic.config.AppConfigManage; import com.hdl.photovoltaic.config.ConstantManage; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.enums.LowerTagType; import com.hdl.photovoltaic.enums.NetworkType; import com.hdl.photovoltaic.other.HdlDeviceLogic; import com.hdl.photovoltaic.other.HdlFileLogic; import com.hdl.photovoltaic.other.HdlLogLogic; import com.hdl.photovoltaic.other.HdlMessageLogic; import com.hdl.photovoltaic.other.HdlResidenceLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.ui.LoginActivity; import com.hdl.photovoltaic.uni.HDLUniMPSDKManager; import com.hdl.photovoltaic.utils.AppManagerUtils; import com.hdl.photovoltaic.utils.LocalManageUtil; import com.hdl.photovoltaic.utils.NetworkUtils; import com.hdl.photovoltaic.utils.SharedPreUtils; import com.hdl.sdk.link.HDLLinkLocalSdk; import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; import com.hdl.sdk.link.core.connect.HDLUdpConnect; import com.hdl.sdk.link.core.utils.QueueUtils; import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient; //import com.umeng.commonsdk.UMConfigure; import org.greenrobot.eventbus.EventBus; import java.util.HashMap; import java.util.List; import java.util.Locale; import java.util.Objects; //import cn.jpush.android.api.JPushInterface; import io.dcloud.common.util.RuningAcitvityUtil; import me.jessyan.autosize.AutoSize; import me.jessyan.autosize.AutoSizeConfig; import me.jessyan.autosize.onAdaptListener; import me.jessyan.autosize.utils.ScreenUtils; import okhttp3.logging.HttpLoggingInterceptor; public class HDLApp extends Application { final String TAG=HDLApp.class.getName(); //控制打印 Debug模式打印 private Boolean isLogEnabled = true; //三方sdk初始化标识 private Boolean isInitThirdSDK = false; //三方sdk初始化标识 /** * 三方sdk初始化标识 * 在StartActivity里面初始化三方SDK的标识 */ public Boolean isStartInitThirdSDK = false; //声明一个当前应用的实例 private static HDLApp mHDLApp; //声明一个公共的信息映射,可当作全局变量使用; public HashMap mInfoMap = new HashMap<>(); //利用单例模式获取当前应用的唯一实例 public static HDLApp getInstance() { return mHDLApp; } @Override public void onCreate() { super.onCreate(); // // 获取当前进程的PID // String processMessage= "进程ID:"+Process.myPid()+" 进程名:"+RuningAcitvityUtil.getAppName(getBaseContext()); // Log.d(TAG, processMessage); // if (RuningAcitvityUtil.getAppName(getBaseContext()).contains(":")) { // //非原生进程,用初始化后面的 // return; // } mHDLApp = this; SharedPreUtils.init(this); getAppLanguage(); //预创建脚本json文件夹 HdlFileLogic.getInstance().createHdlESLocalJsonDirectory(); init(); } public void getAppLanguage() { String language = UserConfigManage.getInstance().getCurrentAppLanguage(); if (TextUtils.isEmpty(language)) { //从内存里面获取不到语言,获取当前系统的; String str = getResources().getConfiguration().locale.getLanguage(); if (str.equals(LocalManageUtil.zh)) { UserConfigManage.getInstance().setCurrentAppLanguage(LocalManageUtil.zh); } else { UserConfigManage.getInstance().setCurrentAppLanguage(LocalManageUtil.en); } } } public void setInfoMap(String key, String value) { mInfoMap.put(key, value); } public String getValue(String key) { if (mInfoMap.containsKey(key)) { return mInfoMap.get(key); } return ""; } public String getKey(String value) { if (mInfoMap.containsValue(value)) { for (String key : mInfoMap.keySet()) { if (Objects.equals(mInfoMap.get(key), value)) { return key; } } } return ""; } public void removeKey(String key) { mInfoMap.remove(key); } /** * 初始化三方相关SDK */ public void init() { // 小程序进程 if (RuningAcitvityUtil.getAppName(getBaseContext()).contains(":")) { return; } if (isInitThirdSDK) { return; } isInitThirdSDK = true; // //5.初始化Bugly // CrashReport.initCrashReport(this, Constant.BUGLY_APP_ID, true); //6.初始化DCUniMPSDK initDCUniMPSDK(); // this.initUniMqtt();//如果是部署到/手机上正式使用,注释掉这行代码就可 // //7.初始化自定义IconToast // ToastUtils.getInstance().initIconToast(this); // //8.对fastjson进行设置,解决fastjosn转换成字符串时首字母大小写问题 // TypeUtils.compatibleWithFieldName = true; // //9.初始化网络工具 // NetWorkUtil.init(this); initAutoSize(); // //初始化极光推送 // initJPush(); initHDLLinkPMSdk(); HDLLinkLocalSdk.getInstance().init(getInstance()); initSocket(); //4.初始化OKHttpLog 是否开启 setOKHttpLogOpen(isLogEnabled); // initMqttClient(); //监听网络状态变化 this.networkMonitoring(); //初始化本地assets文件夹资源文件 // this.initLocalAssetsData(); // //初始化友盟SDK,放在StartActivity里面初始化 // initUMengSDK(); } /** * 初始化友盟SDK,抓闪退日志 * 集成教程地址:https://developer.umeng.com/docs/119267/detail/118588 */ private void initUMengSDK() { // UMConfigure.preInit(this, "6801aec0bc47b67d833fd76d", "XenterraSolar"); // //appkey和channl必须保持和预初始化一致!!! // //deviceType:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子 // //pushSecret:Push推送业务的secret // UMConfigure.init(this, "6801aec0bc47b67d833fd76d", "XenterraSolar", UMConfigure.DEVICE_TYPE_PHONE, ""); // UMConfigure.setLogEnabled(false);//AppConfigManage.isDebug() } /** * 初始化HDLLinkPMSdk */ private void initHDLLinkPMSdk() { //1.初始化SDK HDLLinkPMSdk.initWithAppKey(this, AppConfigManage.getAppKey(), AppConfigManage.getAppSecret(), AppConfigManage.getAPPRegionUrl()); //2.设置打印 HDLLinkPMSdk.setLogEnabled(isLogEnabled); if (TextUtils.isEmpty(UserConfigManage.getInstance().getCurrentAppLanguage())) { //默认配置接口请求语言是英文 UserConfigManage.getInstance().setCurrentAppLanguage(LocalManageUtil.en); } //3.配置接口请求语言 HDLLinkPMSdk.setLanguage(UserConfigManage.getInstance().getCurrentAppLanguage()); // //3.配置接口请求语言 // Locale locale = LocalManageUtil.getSystemLocale(this); // if (!locale.getLanguage().equals("zh")) { // HDLLinkPMSdk.setLanguage("en"); // } else { // HDLLinkPMSdk.setLanguage("zh"); // } // HDLLinkPMSdk.setLanguage("en");//强制使用英文 //4.监听登出处理 HDLLinkPMUser.getInstance().setOnReloginListener(new IOnReloginListener() { @Override public void onReLogin(int type) { HdlLogLogic.print("监听到登录退出---" + type, true); //type: 0:正常退出 1:极光推送强制退出 //收到登录处理通知,关闭所有页面并打开登录页面 AppManagerUtils.getAppManager().finishAllActivity(); // HDLSDKSPUtils.clear();//底层自己清空 //重新登陆,默认同意隐私政策 UserConfigManage.getInstance().setAcceiptPolicy(false); //重新设定一个时间 UserConfigManage.getInstance().setLoginDateTime(0); UserConfigManage.getInstance().Save(); //清空消息缓存数据 HdlMessageLogic.getInstance().clearListMessage(); //清空电站缓存数据 HdlResidenceLogic.getInstance().clearHouseList(); //清空设备缓存数据 HdlDeviceLogic.getInstance().clearDeviceList(); //清空缓存数据 if (mInfoMap != null) { mInfoMap.clear(); } //断开mqtt连接 if (MqttRecvClient.getInstance() != null) { MqttRecvClient.getInstance().disConnect(); } //断开所有tcp连接且清空连接缓存 // TODO: 10/10/23 // TcpSocketBoot.stopAllConnectLinkGateway(); if (null != HDLUniMPSDKManager.getInstance().getUniMP()) { HDLUniMPSDKManager.getInstance().getUniMP().closeUniMP(); } SystemClock.sleep(200); initDCUniMPSDK(); Intent intent = new Intent(getInstance(), LoginActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); if (type == 1) { intent.putExtra("isJpush", true); } startActivity(intent); } }); } /** * 初始化UniMPSDK 小程序SDK */ private void initDCUniMPSDK() { HDLUniMPSDKManager.getInstance().initDCUniMPSDK(this); } //初始化socket及启动处理接收到数据的处理方法 private void initSocket() { QueueUtils.getInstance().start(); HDLUdpConnect.getInstance().initUdp(); } /** * 初始化OKHttpLog */ private void setOKHttpLogOpen(Boolean isOpen) { if (isOpen) { HttpLoggingInterceptor httpLoggingInterceptor = new HttpLoggingInterceptor(); httpLoggingInterceptor.level(HttpLoggingInterceptor.Level.BODY); HxHttpConfig.getInstance().addInterceptor(httpLoggingInterceptor); } } /** * 初始化极光SDK */ private void initJPush() { // JPushInterface.setDebugMode(true); // JPushInterface.init(getBaseContext()); } /** * 监听网络状态变化 */ private void networkMonitoring() { NetworkUtils.init(getInstance()); NetworkUtils.registerNetworkStatusChangedListener(new NetworkUtils.OnNetworkStatusChangedListener() { @Override public void onDisconnected() { BaseEventBus baseEventBus = new BaseEventBus(); baseEventBus.setTopic(ConstantManage.network_change_post); baseEventBus.setType(NetworkType.no_network.toString()); baseEventBus.setData("当前无网络连接"); EventBus.getDefault().post(baseEventBus); } @Override public void onConnected(NetworkUtils.NetworkType networkType) { BaseEventBus mobile_network = new BaseEventBus(); mobile_network.setTopic(ConstantManage.network_change_post); mobile_network.setType(networkType.toString()); mobile_network.setData("正在使用2G/3G/4G网络/wifi"); EventBus.getDefault().post(mobile_network); } }); } /** * 读取加载本地配置文件数据 */ private void initLocalAssetsData() { //数据多有点卡,所以加了线程 HdlThreadLogic.runSubThread(new Runnable() { @Override public void run() { //获取国家省市数据 LocalManageUtil.getLocationInfo(getInstance()); //获取经纬度 LocalManageUtil.getLongLatInfo(getInstance()); } }); } /** * 蓝湖上 修改宽度 640dp 宽度按照dp、sp来适配 * 旋转后高变宽,按旋转后高度适配,所以宽度不写死 */ private void initAutoSize() { AutoSize.initCompatMultiProcess(this); boolean isBaseOnWidth = getResources().getConfiguration().orientation == Configuration.ORIENTATION_PORTRAIT; AutoSizeConfig.getInstance().setBaseOnWidth(true).setCustomFragment(true).setDesignWidthInDp(375).setDesignHeightInDp(812).setUseDeviceSize(false).setOnAdaptListener(new onAdaptListener() { @Override public void onAdaptBefore(Object target, Activity activity) { AutoSizeConfig.getInstance().setScreenWidth(ScreenUtils.getScreenSize(activity)[0]); AutoSizeConfig.getInstance().setScreenHeight(ScreenUtils.getScreenSize(activity)[1] + ScreenUtils.getHeightOfNavigationBar(activity) + ScreenUtils.getStatusBarHeight()); } @Override public void onAdaptAfter(Object target, Activity activity) { } }); } /** * 初始化uni app mqtt */ private void initUniMqtt() { try { String ip = "192.168.1.100";//NetworkUtils.getIPAddress(this); if (TextUtils.isEmpty(ip)) { return; } //IP 地址要根据实际的更改 com.hdl.photovoltaic.ui.test.UniAppMqtt.getInstance().initMqtt(this, "tcp://" + ip + ":1883", "Android_" + android.os.Build.BRAND + "_" + this.hashCode(), new String[]{"PCToAndroid/#"}); com.hdl.photovoltaic.ui.test.UniAppMqtt.getInstance().setUni(true); } catch (Exception e) { HdlLogLogic.print("测试Mqtt连接服务端失败--->"); } } @Override protected void attachBaseContext(Context base) { MultiDex.install(base); super.attachBaseContext(base); } /** * 支持中英文切换 */ public Context getAppLocaleContext(Context context) { try { Locale locale = new Locale(UserConfigManage.getInstance().getCurrentAppLanguage()); Configuration configuration = context.getResources().getConfiguration(); configuration.setLocale(locale); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { configuration.setLocales(new LocaleList(locale)); } return context.createConfigurationContext(configuration); } catch (Exception e) { return context; } } /** * 支持中英文切换 */ public Context getAppLocaleContext() { try { Locale locale = new Locale(UserConfigManage.getInstance().getCurrentAppLanguage()); Configuration configuration = getResources().getConfiguration(); configuration.setLocale(locale); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { configuration.setLocales(new LocaleList(locale)); } return createConfigurationContext(configuration); } catch (Exception e) { return this; } } }