package com.hdl.photovoltaic;
|
|
import android.app.Activity;
|
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.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 org.greenrobot.eventbus.EventBus;
|
|
import java.util.HashMap;
|
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 {
|
|
//控制打印 Debug模式打印
|
private Boolean isLogEnabled = true;
|
//三方sdk初始化标识
|
private Boolean isInitThirdSDK = false;
|
//三方sdk初始化标识
|
/**
|
* 三方sdk初始化标识
|
* 在StartActivity里面初始化三方SDK的标识
|
*/
|
public Boolean isStartInitThirdSDK = false;
|
//声明一个当前应用的实例
|
private static HDLApp mHDLApp;
|
//声明一个公共的信息映射,可当作全局变量使用;
|
public HashMap<String, String> mInfoMap = new HashMap<>();
|
|
|
//利用单例模式获取当前应用的唯一实例
|
public static HDLApp getInstance() {
|
return mHDLApp;
|
}
|
|
@Override
|
public void onCreate() {
|
super.onCreate();
|
// 获取当前进程的PID
|
Log.d("进程===", android.os.Process.myPid() + "");
|
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();
|
|
|
}
|
|
|
/**
|
* 初始化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;
|
}
|
}
|
}
|