package com.hdl.photovoltaic.ui; import androidx.annotation.NonNull; import androidx.appcompat.content.res.AppCompatResources; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentTransaction; import androidx.lifecycle.Lifecycle; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.location.LocationManager; import android.os.Bundle; import android.os.Process; import android.os.SystemClock; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.TextView; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.linkpm.sdk.home.type.HomeType; import com.hdl.photovoltaic.HDLApp; import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.bean.MqttInfo; import com.hdl.photovoltaic.config.ConstantManage; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivityMyPowerStationBinding; import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch; import com.hdl.photovoltaic.enums.LowerTagType; import com.hdl.photovoltaic.enums.NetworkType; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlCommonLogic; import com.hdl.photovoltaic.other.HdlDeviceLogic; import com.hdl.photovoltaic.other.HdlESLocalJsonLogic; import com.hdl.photovoltaic.other.HdlLogLogic; import com.hdl.photovoltaic.other.HdlMessageLogic; import com.hdl.photovoltaic.other.HdlMqttLogic; import com.hdl.photovoltaic.other.HdlOtaLogic; import com.hdl.photovoltaic.other.HdlResidenceLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.other.HdlUniLogic; import com.hdl.photovoltaic.ui.bean.DeviceRemoteInfo; import com.hdl.photovoltaic.ui.bean.OidBean; import com.hdl.photovoltaic.ui.bean.UnCountBean; import com.hdl.photovoltaic.ui.home.HomePageFragment; import com.hdl.photovoltaic.ui.me.MeFragment; import com.hdl.photovoltaic.ui.message.MessageFragment; import com.hdl.photovoltaic.ui.powerstation.HouseAndDeviceFragment; import com.hdl.photovoltaic.uni.HDLUniMP; import com.hdl.photovoltaic.utils.AppManagerUtils; import com.hdl.photovoltaic.utils.FragmentUtils; import com.hdl.photovoltaic.utils.GPSManagerUtils; import com.hdl.photovoltaic.utils.PermissionUtils; import com.hdl.photovoltaic.utils.SharedPreUtils; import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; import com.hdl.photovoltaic.widget.ConfirmationTipDialog; import com.hdl.sdk.link.HDLLinkLocalSdk; import com.hdl.sdk.link.common.event.EventListener; import com.hdl.sdk.link.core.bean.LinkResponse; import com.hdl.sdk.link.core.bean.ModbusResponse; import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; import com.hdl.sdk.link.core.bean.gateway.GatewayBean; import com.hdl.sdk.link.core.config.HDLLinkConfig; import com.hdl.sdk.link.core.connect.HDLUdpConnect; import com.hdl.sdk.link.core.utils.mqtt.MqttRecvClient; import com.umeng.analytics.MobclickAgent; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; import java.lang.reflect.Type; import java.util.ArrayList; import java.util.List; import cn.jpush.android.api.JPushInterface; /** * B端-电站界面 */ public class BPowerStationActivity extends CustomBaseActivity { private static final String CURRENT_FRAGMENT = "state_fragment_show"; private FragmentManager mFragmentManager; private Fragment currentFragment = new Fragment(); private final List fragmentList = new ArrayList<>(); private int currentFragmentIndex = 0; private ActivityMyPowerStationBinding viewBinding; private EventListener allTopicsListener; private int backPressTimes; @Override public Object getContentView() { viewBinding = ActivityMyPowerStationBinding.inflate(getLayoutInflater()); return viewBinding.getRoot(); } @Override public void onBindView(Bundle savedInstanceState) { setStatusBarTranslucent(); getWindow().setNavigationBarColor(getColor(R.color.text_FF1C1C1E)); //初始化碎片 initFragment(null); //初始化 this.initView(); //初始化界面监听器 this.initEvent(); //注册监听 this.registerAllTopicsListener(); //初始化mqtt客户端 this.initMqttClient(); //上传极光注册ID到云端 this.pushTokens(); //点击极光通知栏消息进来 this.clickJpushNotificationMessage(); //初始化权限 this.requestPermissions(); //读取消息未读数量 this.getUnreadCount(); //获取云端脚本 HdlESLocalJsonLogic.getInstance().getAllHdlESLocalJson(); } /** * 初始化Fragment * * @param savedInstanceState - */ private void initFragment(Bundle savedInstanceState) { mFragmentManager = getSupportFragmentManager(); //碎片初始化 HomePageFragment mHomePageFragment = new HomePageFragment(); HouseAndDeviceFragment mHouseAndDeviceFragment = new HouseAndDeviceFragment(); MessageFragment mMessageFragment = new MessageFragment(); MeFragment mMeFragment = new MeFragment(); if (savedInstanceState != null) { //“内存重启”时调用 获取“内存重启”时保存的索引下标 currentFragmentIndex = savedInstanceState.getInt(CURRENT_FRAGMENT, 0); if (!fragmentList.isEmpty()) { fragmentList.clear(); } fragmentList.add(mFragmentManager.findFragmentByTag(0 + "")); fragmentList.add(mFragmentManager.findFragmentByTag(1 + "")); fragmentList.add(mFragmentManager.findFragmentByTag(2 + "")); fragmentList.add(mFragmentManager.findFragmentByTag(3 + "")); this.restoreFragment();//恢复fragment页面 } else { // this.removeAllFragments(); //正常启动时调用 if (!fragmentList.isEmpty()) { fragmentList.clear(); } fragmentList.add(mHomePageFragment); fragmentList.add(mHouseAndDeviceFragment); fragmentList.add(mMessageFragment); fragmentList.add(mMeFragment); this.showFragment(); } // if (!fragmentList.isEmpty()) { // fragmentList.clear(); // } // // 正常启动时调用 // fragmentList.add(mHomePageFragment); // fragmentList.add(mHouseAndDeviceFragment); // fragmentList.add(mMessageFragment); // fragmentList.add(mMeFragment); // FragmentUtils.loadMultipleFragment(R.id.module_fcv, mFragmentManager, fragmentList.toArray(new Fragment[0])); } /** * 使用show() hide()切换页面 * 显示fragment */ private void showFragment() { // FragmentUtils.showHideFragment(mFragmentManager, fragmentList.toArray(new Fragment[0])[currentFragmentIndex]); FragmentTransaction ft = mFragmentManager.beginTransaction(); //如果之前没有添加过 if (!fragmentList.get(currentFragmentIndex).isAdded()) { //第三个参数为添加当前的fragment时绑定一个tag ft.hide(currentFragment).add(R.id.module_fcv, fragmentList.get(currentFragmentIndex), currentFragmentIndex + ""); } else { ft.hide(currentFragment).show(fragmentList.get(currentFragmentIndex)); } //把当前显示的fragment记录下来 currentFragment = fragmentList.get(currentFragmentIndex); ft.commit(); //把当前显示的fragment记录下来 } /** * 恢复fragment */ private void restoreFragment() { FragmentTransaction ft = mFragmentManager.beginTransaction(); for (int i = 0; i < fragmentList.size(); i++) { if (i == currentFragmentIndex) { ft.show(fragmentList.get(i)); } else { ft.hide(fragmentList.get(i)); } } ft.commit(); } private void removeAllFragments() { if (mFragmentManager == null) return; try { final List fragments = mFragmentManager.getFragments(); if (fragments.isEmpty()) { return; } FragmentTransaction transaction = mFragmentManager.beginTransaction(); for (int i = 0; i < fragments.size(); i++) { Fragment fragment = fragments.get(i); if (fragment != null) { transaction.remove(fragment); } } transaction.commit(); } catch (Exception e) { e.printStackTrace(); } } @Override protected void onResume() { super.onResume(); //启动页与mainActivity样式一样,这样启动页和mainActivity看上去是一个界面,目的是为了mainActivity遮住下一页; // AppManagerUtils.getAppManager().finishActivity(StartActivity.class); portConflictDialog(); // Intent intent = new Intent(_mActivity, BPowerStationActivity.class); // intent.setFlags(Intent.Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); // intent.putExtra("skip", "skip");//里面判断有这个标识就跳转到消息中心界面 // _mActivity.startActivity(intent); //点击极光通知栏消息进来 // this.clickJpushNotificationMessage(); } /** * 上传极光注册ID到云端 */ private void pushTokens() { String registrationId_tag = "registrationID_" + UserConfigManage.getInstance().getUserId(); String is_registrationID = HDLApp.getInstance().getKey(registrationId_tag); if (is_registrationID.equals("true")) { //上过就没有必要在上传啦 return; } HdlThreadLogic.runSubThread(new Runnable() { @Override public void run() { String registrationID = JPushInterface.getRegistrationID(_mActivity); int addCount = 0; while (TextUtils.isEmpty(registrationID)) { SystemClock.sleep(1000);//1s休眠 registrationID = JPushInterface.getRegistrationID(_mActivity); addCount++; if (addCount > 5) { //5s超时 break; } } if (!TextUtils.isEmpty(registrationID)) { UserConfigManage.getInstance().setRegistrationID(registrationID); UserConfigManage.getInstance().Save(); String finalRegistrationID = registrationID; HdlResidenceLogic.getInstance().pushAdd(new CloudCallBeak() { @Override public void onSuccess(String pushId) { if (!TextUtils.isEmpty(pushId)) { UserConfigManage.getInstance().setPushId(pushId); UserConfigManage.getInstance().Save(); } HDLApp.getInstance().setInfoMap(registrationId_tag, "true");//记录一下状态,后台杀死app会清空; HdlLogLogic.print("添加极光ID到云端---registrationID:" + UserConfigManage.getInstance().getUserName() + "---" + finalRegistrationID, true); } @Override public void onFailure(HDLException e) { HDLApp.getInstance().setInfoMap(registrationId_tag, "false");//记录一下状态,后台杀死app会清空; HdlLogLogic.print("添加极光ID到云端失败---registrationID:" + UserConfigManage.getInstance().getUserName() + "---" + finalRegistrationID, true); } }); } } }); } /** * 开启通知权限 */ private void notificationSet() { String key = "isOpenNotificationEnabled"; boolean isCancel = SharedPreUtils.getBoolean(key); if (!isCancel) { boolean isBoolean = PermissionUtils.isNotificationEnabled(_mActivity); if (!isBoolean) { ConfirmationCancelDialog confirmationCancelDialog = new ConfirmationCancelDialog(_mActivity); confirmationCancelDialog.setTitle(getString(R.string.loading_title_tip)); confirmationCancelDialog.setContent(getString(R.string.no_permissions_unable_to_receive_push)); confirmationCancelDialog.setConfirmation(getString(R.string.go_to_settings)); confirmationCancelDialog.show(); confirmationCancelDialog.isHideTitle(true); confirmationCancelDialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { @Override public void Confirm() { SharedPreUtils.putBoolean(key, true); confirmationCancelDialog.dismiss(); PermissionUtils.openNotificationSettings(_mActivity); } }); confirmationCancelDialog.setNoOnclickListener(new ConfirmationCancelDialog.onNoOnclickListener() { @Override public void Cancel() { SharedPreUtils.putBoolean(key, true); confirmationCancelDialog.dismiss(); } }); } else { SharedPreUtils.putBoolean(key, true); } } } private void initEvent() { viewBinding.myPowerStationBottomIl0.clickTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentFragmentIndex == 0) { return; } currentFragmentIndex = 0; bottomViewChangeOfStyle(); showFragment(); HdlCommonLogic.lowerTagType = LowerTagType.home; HdlCommonLogic.getInstance().postEventBusSticky(ConstantManage.homepage_title_tab_switch, HomepageTitleTabSwitch.homepage.toString()); } }); viewBinding.myPowerStationBottomIl1.clickTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentFragmentIndex == 1) { return; } currentFragmentIndex = 1; bottomViewChangeOfStyle(); showFragment(); HdlCommonLogic.lowerTagType = LowerTagType.power_station; HdlCommonLogic.getInstance().postEventBusSticky(ConstantManage.homepage_title_tab_switch, HomepageTitleTabSwitch.powerstation.toString()); } }); viewBinding.myMessageBottomIl2.clickTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentFragmentIndex == 2) { return; } currentFragmentIndex = 2; bottomViewChangeOfStyle(); showFragment(); HdlCommonLogic.lowerTagType = LowerTagType.message; HdlCommonLogic.getInstance().postEventBusSticky(ConstantManage.homepage_title_tab_switch, HomepageTitleTabSwitch.message.toString()); } }); viewBinding.myMeBottomIl3.clickTv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (currentFragmentIndex == 3) { return; } currentFragmentIndex = 3; bottomViewChangeOfStyle(); showFragment(); HdlCommonLogic.lowerTagType = LowerTagType.me; HdlCommonLogic.getInstance().postEventBusSticky(ConstantManage.homepage_title_tab_switch, HomepageTitleTabSwitch.me.toString()); } }); } @Override protected void onDestroy() { super.onDestroy(); HdlUniLogic.getInstance().checkRemoveOtherUniMPEventCallBack(); //移除监听 HDLLinkLocalSdk.getInstance().removeAllTopicsListener(allTopicsListener); } private void initView() { viewBinding.myPowerStationBottomIl0.titleTv.setText(R.string.power_home_page); viewBinding.myPowerStationBottomIl1.titleTv.setText(R.string.power_station); viewBinding.myMessageBottomIl2.titleTv.setText(R.string.message); viewBinding.myMeBottomIl3.titleTv.setText(R.string.power_station_me); this.bottomViewChangeOfStyle(); } /** * 底部模块样式改变 */ private void bottomViewChangeOfStyle() { if (this.currentFragmentIndex == 0) { //概览界面 viewBinding.myPowerStationBottomIl0.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.home_page_selected)); viewBinding.myPowerStationBottomIl0.titleTv.setTextColor(getColor(R.color.text_FFACACAC)); viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.power_station_unselected)); viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_unselected)); viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.me_unselected)); viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); } else if (this.currentFragmentIndex == 1) { //电站界面 viewBinding.myPowerStationBottomIl0.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.home_page_unselected)); viewBinding.myPowerStationBottomIl0.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.power_station_selected)); viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_FFACACAC)); viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_unselected)); viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.me_unselected)); viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); } else if (this.currentFragmentIndex == 2) { //消息界面 viewBinding.myPowerStationBottomIl0.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.home_page_unselected)); viewBinding.myPowerStationBottomIl0.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.power_station_unselected)); viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_selected)); viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_FFACACAC)); viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.me_unselected)); viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); } else if (this.currentFragmentIndex == 3) { //我的界面 viewBinding.myPowerStationBottomIl0.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.home_page_unselected)); viewBinding.myPowerStationBottomIl0.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myPowerStationBottomIl1.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.power_station_unselected)); viewBinding.myPowerStationBottomIl1.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myMessageBottomIl2.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.message_unselected)); viewBinding.myMessageBottomIl2.titleTv.setTextColor(getColor(R.color.text_FF5B5B5B)); viewBinding.myMeBottomIl3.iconIv.setImageDrawable(AppCompatResources.getDrawable(_mActivity, R.drawable.me_selected)); viewBinding.myMeBottomIl3.titleTv.setTextColor(getColor(R.color.text_FFACACAC)); } } public void requestPermissions() { //消息通知限权 this.notificationSet(); //ACCESS_FINE_LOCATION 允许使用GPS定位 //ACCESS_COARSE_LOCATION 允许使用WIFI热点或基站来获取粗略的定位 // String[] ary = PermissionUtils.checkPermission(_mActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_COARSE_LOCATION}); // if (ary.length > 0) { // this.requestPermissions(ary, PermissionUtils.STATUS_SUCCESS); // } else { // locationUpdates(); // } } @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) { super.onRequestPermissionsResult(requestCode, permissions, grantResults); if (requestCode == PermissionUtils.STATUS_SUCCESS) { for (int i = 0; i < permissions.length; i++) { if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { switch (permissions[i]) { case Manifest.permission.ACCESS_FINE_LOCATION: { locationUpdates(); } break; } } } } } /** * 注册所有主题数据的监听 */ private void registerAllTopicsListener() { allTopicsListener = new EventListener() { @Override public void onMessage(Object msg) { if (msg == null) { return; } if (msg instanceof ModbusResponse) { ModbusResponse response = (ModbusResponse) msg; if (response.getTopic() == null) { return; } HdlLogLogic.print("监听到Modbus数据---" + new Gson().toJson(response), false); // if (response.getTopic().endsWith("custom/native/inverter/up")) { HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); uniCallBackBaseBean.setType(response.getTopic()); uniCallBackBaseBean.setData(response.getData()); // if (com.hdl.photovoltaic.ui.test.UniAppMqtt.getInstance().getUni()) { // try { // String t = String.format("AndroidToPC/%s/%s", System.currentTimeMillis(), HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL); // com.hdl.photovoltaic.ui.test.UniAppMqtt.getInstance().publish(t, JSONObject.toJSON(uniCallBackBaseBean).toString()); // } catch (Exception ignored) { // } // } else { HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, uniCallBackBaseBean); // } // } } else if (msg instanceof LinkResponse) { LinkResponse linkResponse = (LinkResponse) msg; if (linkResponse.getTopic() == null) { return; } if (linkResponse.getTopic().endsWith("/ota/device/progress/up")) { HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); uniCallBackBaseBean.setType(linkResponse.getTopic()); uniCallBackBaseBean.setData(linkResponse.getData()); HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_REPLY_OTA_MODEL, uniCallBackBaseBean); HdlLogLogic.print(linkResponse.getTopic() + new Gson().toJson(linkResponse.getData()), true); } else if (linkResponse.getTopic().endsWith("/custom/device/list/upload")) { //逆变器有新oid通知主题 if (linkResponse.getData() == null) { HdlLogLogic.print("逆变器有新oid通知---数据为空", false); return; } try { Gson gson = new Gson(); Type typeOfT = new TypeToken>() { }.getType(); String json = gson.toJson(linkResponse.getData()); List oidList = gson.fromJson(json, typeOfT); //增量增加add HdlDeviceLogic.getInstance().updateOidAdd(UserConfigManage.getInstance().getHomeId(), oidList, null); } catch (Exception ignored) { } } else if (linkResponse.getTopic().endsWith("custom/wifi/notify")) { //逆变器连接路由状态通知 HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); uniCallBackBaseBean.setType(linkResponse.getTopic()); uniCallBackBaseBean.setData(linkResponse.getData()); HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, uniCallBackBaseBean); HdlLogLogic.print(linkResponse.getTopic() + new Gson().toJson(linkResponse.getData()), true); } else if (linkResponse.getTopic().endsWith("/app/thing/event/appHomeRemoveRefresh/up")) { String[] topicArray = linkResponse.getTopic().split("/"); //住宅删除通知 HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); uniCallBackBaseBean.setType(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_home_remove_refresh); uniCallBackBaseBean.setData(topicArray[1]); HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, uniCallBackBaseBean); HdlLogLogic.print(linkResponse.getTopic() + new Gson().toJson(linkResponse.getData()), true); } else if (linkResponse.getTopic().endsWith("/app/thing/event/appHomeDebugRefresh/up")) { String[] topicArray = linkResponse.getTopic().split("/"); //住宅二次调试(授权状态)刷新通知 HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); uniCallBackBaseBean.setType(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_home_debug_refresh); uniCallBackBaseBean.setData(topicArray[1]); HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, uniCallBackBaseBean); HdlLogLogic.print(linkResponse.getTopic() + new Gson().toJson(linkResponse.getData()), true); } else if (linkResponse.getTopic().endsWith("/app/thing/event/appHomeDeliverRefresh/up")) { String[] topicArray = linkResponse.getTopic().split("/"); //住宅交付状态变更刷新通知 HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); uniCallBackBaseBean.setType(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_home_delivery_refresh); uniCallBackBaseBean.setData(topicArray[1]); HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, uniCallBackBaseBean); HdlLogLogic.print(linkResponse.getTopic() + new Gson().toJson(linkResponse.getData()), true); } else if (linkResponse.getTopic().endsWith("/app/thing/property/send")) { //设备状态变更topic:/user/${homeId}/app/thing/property/send if (linkResponse.getData() == null) { HdlLogLogic.print("设备状态变更--->数据为空", false); return; } HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); uniCallBackBaseBean.setType(linkResponse.getTopic()); uniCallBackBaseBean.setData(linkResponse.getData()); HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_NOTIFICATION_DEVICE_MODEL, uniCallBackBaseBean); } } } }; HDLLinkLocalSdk.getInstance().registerAllTopicsListener(allTopicsListener); } /** * 初始化mqtt客户端 */ public void initMqttClient() { //检查断开状态 if (!MqttRecvClient.getInstance().isConnected()) { MqttRecvClient.getInstance().reConnect(); } if (!MqttRecvClient.getInstance().isInit()) { HdlMqttLogic.getInstance().getMqttRemoteInfo(HomeType.A, new CloudCallBeak() { @Override public void onSuccess(MqttInfo info) { if (info != null) { MqttRecvClient.getInstance().setConnectParam(info.getUrl(), info.getClientId(), info.getUserName(), info.getPassWord()); MqttRecvClient.getInstance().connect(); HdlLogLogic.print("mqtt链接成功---ClientId---" + info.getClientId(), true); } } @Override public void onFailure(HDLException e) { HdlLogLogic.print("读取mqtt远程信息失败---" + e.getMessage(), e.getCode(), true); } }); } } @Subscribe(threadMode = ThreadMode.MAIN) public void onEventMessage(BaseEventBus event) { if (event == null) { return; } if (TextUtils.isEmpty(event.getTopic())) { return; } //网关更新mqtt秘钥更新通知 if (event.getTopic().contains("/custom/mqtt/secret/change")) { String[] topics = event.getTopic().split("/"); //主题不符合规则不处理 if (topics.length < 3) { return; } int index = -1; List list = HdlDeviceLogic.getInstance().getCurrentHomeGatewayList(UserConfigManage.getInstance().getHomeId(), null); for (int i = 0; i < list.size(); i++) { GatewayBean gatewayBean = list.get(i); if (gatewayBean.getGatewayId().equals(topics[2])) { index = i; break; } } if (index > -1) { GatewayBean gatewayBean = list.get(index); HdlDeviceLogic.getInstance().getDeviceRemoteInfo(UserConfigManage.getInstance().getHomeId(), gatewayBean.getSpk(), gatewayBean.getDevice_mac(), new CloudCallBeak() { @Override public void onSuccess(DeviceRemoteInfo deviceRemoteInfo) { if (deviceRemoteInfo != null) { //更新mqtt通讯的新秘钥 gatewayBean.setAesKey(deviceRemoteInfo.getSecret()); //用之前的库,底层mqtt订阅,加解密会用到该参数; HDLLinkConfig.getInstance().setAesKey(deviceRemoteInfo.getSecret());//设置mqtt通讯秘钥库 } } @Override public void onFailure(HDLException e) { } }); } } else if (event.getTopic().contains(HdlOtaLogic.localDownloadProgress)) { //下载云端驱动或者固件文件到本地,自己计算进度条上报到uni那边 HDLUniMP.UniCallBackBaseBean uniCallBackBaseBean = new HDLUniMP.UniCallBackBaseBean(); uniCallBackBaseBean.setType(event.getType()); uniCallBackBaseBean.setData(event.getData()); HdlUniLogic.getInstance().sendUni(HDLUniMP.UNI_EVENT_REPLY_OTA_MODEL, uniCallBackBaseBean); HdlLogLogic.print(event.getTopic() + new Gson().toJson(event.getData()), true); } else if (event.getTopic().contains(ConstantManage.network_change_post)) { // String wifi_ssid = WifiUtils.getInstance().getCurrentConnectWifiSsid();//获取WiFi的ssid需要位置权限的 HdlLogLogic.print("监听网络状态--->" + event.getData().toString() + "(" + event.getType() + ")", true); //第一次启动App,以及切换网络的时候更新 if (TextUtils.isEmpty(UserConfigManage.getInstance().getHomeId())) { return; } if (!event.getType().equals(NetworkType.no_network.toString())) { // AppManagerUtils.getAppManager().showLoading(); HdlThreadLogic.runSubThread(new Runnable() { @Override public void run() { //防止app启动的时候没有网络(app也登录不了),导致获取不了mqtt远程连接信息; initMqttClient(); HdlDeviceLogic.getInstance().getCurrentHomeLocalAndCloudGatewayList(UserConfigManage.getInstance().getHomeId(), new CloudCallBeak>() { @Override public void onSuccess(List obj) { // AppManagerUtils.getAppManager().hideLoading(); } @Override public void onFailure(HDLException e) { // AppManagerUtils.getAppManager().hideLoading(); } }); } }); } } else if (event.getTopic().contains(ConstantManage.homepage_title_tab_switch)) { if (event.getType().contains(ConstantManage.station_page)) { //从首页指定电站状态打开电站界面 currentFragmentIndex = 1; bottomViewChangeOfStyle(); showFragment(); } } } /** * 读取消息【未读数量,未处理总数量,已处理总数量】 */ private void getUnreadCount() { HdlMessageLogic.getInstance().getMessageUntreatedCount("", new CloudCallBeak() { @Override public void onSuccess(UnCountBean unCountBean) { HdlThreadLogic.runMainThread(new Runnable() { @Override public void run() { if (unCountBean == null) { return; } //刷新【消息模块】下角标数值 TextView textView = _mActivity.findViewById(R.id.my_message_bottom_il2).findViewById(R.id.red_count_tv); if (textView != null) { if (unCountBean.getUnreadCount() == 0) { textView.setVisibility(View.GONE); } else { textView.setVisibility(View.VISIBLE); if (unCountBean.getUnreadCount() > 99) { textView.setText("99+"); } else { textView.setText(unCountBean.getUnreadCount() + ""); } } } } }); } @Override public void onFailure(HDLException e) { HdlThreadLogic.runMainThread(new Runnable() { @Override public void run() { TextView textView = _mActivity.findViewById(R.id.my_message_bottom_il2).findViewById(R.id.red_count_tv); if (textView != null) { textView.setVisibility(View.GONE); } } }); } }); } /** * 点击极光通知栏消息进来 */ private void clickJpushNotificationMessage() { Intent intent = getIntent(); if (intent != null) { String key = intent.getStringExtra("skip"); if (key != null) { //触发消息点击事件 viewBinding.myMessageBottomIl2.clickTv.performClick(); } } } /** * 物理按键返回事件(包括左滑移除事件) */ @Override public void onBackPressed() { if (AppManagerUtils.getAppManager().getActivitySize() <= 1) { if (backPressTimes == 0) { HdlThreadLogic.toast(_mActivity, R.string.kill_app); backPressTimes = 1; new Thread() { @Override public void run() { try { Thread.sleep(2000); } catch (InterruptedException e) { e.printStackTrace(); } finally { backPressTimes = 0; } } }.start(); return; } else { AppManagerUtils.getAppManager().finishAllActivity(); //如果开发者调用kill或者exit之类的方法杀死进程,或者双击back键会杀死进程,请务必在此之前调用MobclickAgent.onKillProcess方法,用来保存统计数据。 MobclickAgent.onKillProcess(_mActivity); Process.killProcess(Process.myPid()); } } super.onBackPressed(); } /** * 初始化【开启定位】和【位置信息】权限 */ private void locationUpdates() { // 初始化LocationManager对象 LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); GPSManagerUtils.getInstance().getLocation(this); // 判断设备是否支持定位功能 if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { // 提示用户打开定位功能或者引导用户去系统设置页面打开定位功能 ConfirmationCancelDialog confirmationCancelDialog = new ConfirmationCancelDialog(_mActivity); confirmationCancelDialog.setContent(getString(R.string.system_positioning_switch)); confirmationCancelDialog.setConfirmation(getString(R.string.go_to_settings)); confirmationCancelDialog.show(); confirmationCancelDialog.isHideTitle(true); confirmationCancelDialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { @Override public void Confirm() { confirmationCancelDialog.dismiss(); Intent intent = new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); HDLApp.getInstance().startActivity(intent); } }); confirmationCancelDialog.setNoOnclickListener(new ConfirmationCancelDialog.onNoOnclickListener() { @Override public void Cancel() { confirmationCancelDialog.dismiss(); } }); } } /** * 端口冲突 */ private void portConflictDialog() { if (!HDLUdpConnect.getInstance().isBindSuccess()) { ConfirmationTipDialog dialog = new ConfirmationTipDialog(_mActivity); dialog.show(); dialog.setTitle(getString(R.string.loading_title_tip)); dialog.setContent(getString(R.string.port_conflict)); dialog.setConfirmation(getString(R.string.home_login_affirm)); dialog.isHideTitle(true); dialog.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { @Override public void Confirm() { dialog.dismiss(); } }); } } }