wjc
2025-05-07 8814f3f0828e6ac652a29cc9de9f971fd55bca5b
app/src/main/java/com/hdl/photovoltaic/HDLApp.java
@@ -1,34 +1,84 @@
package com.hdl.photovoltaic;
import android.Manifest;
import android.app.Activity;
import android.app.ActivityManager;
import android.app.Application;
import android.content.pm.PackageManager;
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.annotation.NonNull;
import androidx.multidex.MultiDex;
import com.google.gson.Gson;
import com.google.gson.JsonObject;
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.PermissionUtils;
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 io.dcloud.feature.sdk.DCSDKInitConfig;
import io.dcloud.feature.sdk.DCUniMPSDK;
import io.dcloud.feature.sdk.Interface.IDCUniMPPreInitCallback;
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<String, String> mInfoMap = new HashMap<>();
    //利用单例模式获取当前应用的唯一实例
    public static HDLApp getInstance() {
@@ -37,10 +87,35 @@
    @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;
        initThirdSDK();
        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) {
@@ -65,31 +140,139 @@
        return "";
    }
    public void removeKey(String key) {
        mInfoMap.remove(key);
    }
    /**
     * 初始化三方相关SDK
     */
    public void initThirdSDK() {
    public void init() {
        // 小程序进程
        if (RuningAcitvityUtil.getAppName(getBaseContext()).contains("unimp")) {
        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);
//        //10.初始化极光推送
        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);
            }
        });
    }
    /**
@@ -99,6 +282,155 @@
        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;
        }
    }
}