app/src/main/AndroidManifest.xml
@@ -31,8 +31,7 @@ <uses-feature android:name="android.hardware.camera" /> <uses-feature android:name="android.hardware.camera.autofocus" /> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 访问闪光灯 --> <uses-permission android:name="android.permission.RECORD_AUDIO" /> <!-- 访问闪光灯 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="android.permission.GET_TASKS" /> @@ -40,43 +39,32 @@ <uses-permission android:name="android.permission.FLASHLIGHT" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.CALL_PHONE" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <uses-permission android:name="android.permission.BLUETOOTH" /> <!-- Optional. Required for location feature --> <uses-permission android:name="android.permission.BLUETOOTH" /> <!-- Optional. Required for location feature --> <!-- 为了提高sdk识别唯一用户的能力,保证消息推送的精准送达,建议集成以下权限(可选)--> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES" /> <uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 如您需要接入地理围栏业务,建议集成以下权限(可选)--> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <!-- 如您需要接入地理围栏业务,建议集成以下权限(可选) --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 如您需要对应设备通知相关的能力,建议集成以下权限(可选)--> <uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" /> <!-- 如您需要对应设备通知相关的能力,建议集成以下权限(可选) --> <uses-permission android:name="com.huawei.android.launcher.permission.CHANGE_BADGE" /><!-- 华为角标 --> <uses-permission android:name="com.vivo.notification.permission.BADGE_ICON" /><!-- VIVO角标权限 --> <uses-permission android:name="com.hihonor.android.launcher.permission.CHANGE_BADGE" /><!--honor 角标--> <uses-permission android:name="android.permission.VIBRATE" /><!--振动器权限,JPUSH支持通知开启振动功能,小米推送必须--> <!-- 扩展备用权限(可选)--> <permission android:name="${applicationId}.permission.JOPERATE_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="${applicationId}.permission.JOPERATE_MESSAGE" /> <!-- Required --> <uses-permission android:name="${applicationId}.permission.JOPERATE_MESSAGE" /> <!-- Required --> <permission android:name="com.hdl.photovoltaic.permission.JPUSH_MESSAGE" android:protectionLevel="signature" /> <uses-permission android:name="com.hdl.photovoltaic.permission.JPUSH_MESSAGE" /> <!-- 适配Android13,弹出通知必须权限--> <uses-permission android:name="com.hdl.photovoltaic.permission.JPUSH_MESSAGE" /> <!-- 适配Android13,弹出通知必须权限 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <application @@ -88,6 +76,9 @@ android:roundIcon="@drawable/version_icon" android:supportsRtl="true" android:theme="@style/Theme.PhotovoltaicDebug"> <activity android:name=".ui.CPowerStationActivity" android:exported="false" /> <activity android:name=".ui.message.MessageInfoActivity" android:exported="false" /> @@ -158,8 +149,7 @@ <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <!-- 注册服务 --> <service android:name=".internet.HttpServer.MyNanoHttpService" /> <!--加它uniapp才能唤起相机--> <service android:name=".internet.HttpServer.MyNanoHttpService" /> <!-- 加它uniapp才能唤起相机 --> <provider android:name="io.dcloud.common.util.DCloud_FileProvider" android:authorities="com.hdl.photovoltaic.dc.fileprovider" @@ -168,10 +158,7 @@ <meta-data android:name="android.support.FILE_PROVIDER_PATHS" android:resource="@xml/dcloud_file_provider" /> </provider> <!-- Since JCore2.0.0 Required SDK核心功能--> </provider> <!-- Since JCore2.0.0 Required SDK核心功能 --> <!-- 可配置android:process参数将Service放在其他进程中;android:enabled属性不能是false --> <!-- 这个是自定义Service,要继承极光JCommonService,可以在更多手机平台上使得推送通道保持的更稳定 --> <service @@ -182,10 +169,7 @@ <intent-filter> <action android:name="cn.jiguang.user.service.action" /> </intent-filter> </service> <!-- Required since 5.2.0 --> </service> <!-- Required since 5.2.0 --> <!-- 新的 tag/alias 接口结果返回需要开发者配置一个自定义的Service --> <!-- 5.2.0开始所有事件将通过该类回调 --> <!-- 该广播需要继承 JPush 提供的 JPushMessageService 类, 并如下新增一个 Intent-Filter --> @@ -195,11 +179,10 @@ android:exported="false"> <intent-filter> <action android:name="cn.jpush.android.intent.SERVICE_MESSAGE" /> <category android:name="com.hdl.photovoltaic" /> </intent-filter> </service> <!--uniMqtt必要的,开启mqtt1883端口一个服务--> </service> <!-- uniMqtt必要的,开启mqtt1883端口一个服务 --> <service android:name="org.eclipse.paho.android.service.MqttService" android:exported="false" /> app/src/main/assets/data/dcloud_control.xml
@@ -1,4 +1,4 @@ <hbuilder debug="true" syncDebug="true" version="1.9.9.80110"> <hbuilder debug="false" syncDebug="false" version="1.9.9.80110"> <apps> <app appid="unimp" appver="1.0" /> </apps> app/src/main/java/com/hdl/photovoltaic/HDLApp.java
@@ -122,7 +122,6 @@ return; } isInitThirdSDK = true; // //5.初始化Bugly // CrashReport.initCrashReport(this, Constant.BUGLY_APP_ID, true); //6.初始化DCUniMPSDK app/src/main/java/com/hdl/photovoltaic/jpush/JPushReceiverService.java
@@ -1,31 +1,17 @@ package com.hdl.photovoltaic.jpush; import android.content.Context; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.google.gson.JsonObject; import com.google.gson.reflect.TypeToken; import com.hdl.photovoltaic.config.ConstantManage; import com.hdl.photovoltaic.other.HdlJpushLogic; import com.hdl.photovoltaic.other.HdlLogLogic; import com.hdl.photovoltaic.ui.MyPowerStationActivity; import com.hdl.photovoltaic.ui.StartActivity; import com.hdl.photovoltaic.ui.bean.BUserInfo; import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; import org.greenrobot.eventbus.EventBus; import java.lang.reflect.Type; import java.util.HashMap; import java.util.Objects; import cn.jpush.android.api.CustomMessage; import cn.jpush.android.api.JPushInterface; import cn.jpush.android.api.NotificationMessage; import cn.jpush.android.service.JPushMessageService; app/src/main/java/com/hdl/photovoltaic/other/HdlJpushLogic.java
@@ -6,8 +6,10 @@ import com.google.gson.Gson; import com.hdl.photovoltaic.config.ConstantManage; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.enums.MessageStateType; import com.hdl.photovoltaic.jpush.JPushMessageInfoBean; import com.hdl.photovoltaic.ui.CPowerStationActivity; import com.hdl.photovoltaic.ui.MyPowerStationActivity; import com.hdl.photovoltaic.ui.bean.MessageBean; import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; @@ -49,10 +51,13 @@ //添加推送数据到缓存列表中; this.addPushDataToMemoryList(jPushMessageInfoBean); if (isOpened) { if (UserConfigManage.getInstance().isBAccount()) { //安装商跳转界面 Intent intent = new Intent(context, MyPowerStationActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("skip", "skip");//里面判断有这个标识就跳转到消息中心界面 context.startActivity(intent); } } else { BaseEventBus bus = new BaseEventBus(); bus.setTopic(ConstantManage.message_function_push_post); app/src/main/java/com/hdl/photovoltaic/ui/CPowerStationActivity.java
New file @@ -0,0 +1,224 @@ package com.hdl.photovoltaic.ui; import android.os.Bundle; import android.os.SystemClock; import android.text.TextUtils; 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.base.CustomBaseActivity; import com.hdl.photovoltaic.bean.MqttInfo; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivityCpowerStationBinding; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlDeviceLogic; import com.hdl.photovoltaic.other.HdlLogLogic; import com.hdl.photovoltaic.other.HdlMqttLogic; import com.hdl.photovoltaic.other.HdlResidenceLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.other.HdlUniLogic; import com.hdl.photovoltaic.ui.bean.OidBean; import com.hdl.photovoltaic.uni.HDLUniMP; 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.utils.mqtt.MqttRecvClient; import java.lang.reflect.Type; import java.util.List; import cn.jpush.android.api.JPushInterface; /** * C端-电站界面 */ public class CPowerStationActivity extends CustomBaseActivity { private ActivityCpowerStationBinding viewBinding; private EventListener allTopicsListener; @Override public Object getContentView() { viewBinding = ActivityCpowerStationBinding.inflate(getLayoutInflater()); return viewBinding.getRoot(); } @Override public void onBindView(Bundle savedInstanceState) { String path = HDLUniMP.UNI_EVENT_OPEN_HOME_DETAILS + "?homeId=" + "1722860312296235010" + "&homeName=" + "7号楼三楼" + "&powerStationStatus=" + 1; HdlUniLogic.getInstance().openUniMP(path, null); //注册监听 this.registerAllTopicsListener(); //初始化mqtt客户端 this.initMqttClient(); //上传极光注册ID到云端 this.pushTokens(); } @Override protected void onDestroy() { super.onDestroy(); HdlUniLogic.getInstance().checkRemoveOtherUniMPEventCallBack(); //移除监听 HDLLinkLocalSdk.getInstance().removeAllTopicsListener(allTopicsListener); //断开mqtt连接 if (MqttRecvClient.getInstance() != null) { MqttRecvClient.getInstance().stop(); } } /** * 上传极光注册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<String>() { @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("C端--->添加极光ID到云端--->registrationID:" + UserConfigManage.getInstance().getUserName() + "--->" + finalRegistrationID, true); } @Override public void onFailure(HDLException e) { HDLApp.getInstance().setInfoMap(registrationId_tag, "false");//记录一下状态,后台杀死app会清空; HdlLogLogic.print("C端--->添加极光ID到云端失败--->registrationID:" + UserConfigManage.getInstance().getUserName() + "--->" + finalRegistrationID, true); } }); } } }); } /** * 初始化mqtt客户端 */ public void initMqttClient() { HdlMqttLogic.getInstance().getMqttRemoteInfo(HomeType.A, new CloudCallBeak<MqttInfo>() { @Override public void onSuccess(MqttInfo info) { if (info != null) { MqttRecvClient.init(_mActivity, info.getUrl(), info.getClientId(), info.getUserName(), info.getPassWord()); } } @Override public void onFailure(HDLException e) { HdlLogLogic.print("C端--->读取mqtt远程信息失败--->" + e.getMessage(), e.getCode(), true); } }); } /** * 注册所有主题数据的监听 */ 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("C端--->监听到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<List<OidBean>>() { }.getType(); String json = gson.toJson(linkResponse.getData()); List<OidBean> oidList = gson.fromJson(json, typeOfT); //增量增加add HdlDeviceLogic.getInstance().updateOidAdd(UserConfigManage.getInstance().getHomeId(), oidList, null); } catch (Exception ignored) { } } } } }; HDLLinkLocalSdk.getInstance().registerAllTopicsListener(allTopicsListener); } } app/src/main/java/com/hdl/photovoltaic/ui/HomeLoginActivity.java
@@ -29,13 +29,13 @@ import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivityHomeLoginBinding; import com.hdl.photovoltaic.other.HdlResidenceLogic; import com.hdl.photovoltaic.ui.account.ChangePassword; import com.hdl.photovoltaic.ui.account.RegisterAccountActivity; import com.hdl.photovoltaic.ui.adapter.LanguageAdapter; import com.hdl.photovoltaic.ui.bean.HouseIdBean; import com.hdl.photovoltaic.config.AppConfigManage; import com.hdl.photovoltaic.databinding.ActivityHomeLoginBinding; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlAccountLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; @@ -257,7 +257,14 @@ hideLoading(); HdlResidenceLogic.getInstance().setHouseIdList(obj); restoreButtonStyleToInitializeState(); if (UserConfigManage.getInstance().isBAccount()) { //安装商跳转界面 startActivity(MyPowerStationActivity.class); } else { //C端用户跳转界面 startActivity(CPowerStationActivity.class); } finish(); } @@ -265,7 +272,13 @@ public void onFailure(HDLException e) { hideLoading(); restoreButtonStyleToInitializeState(); if (UserConfigManage.getInstance().isBAccount()) { //安装商跳转界面 startActivity(MyPowerStationActivity.class); } else { //C端用户跳转界面 startActivity(CPowerStationActivity.class); } finish(); } }); app/src/main/java/com/hdl/photovoltaic/ui/MyPowerStationActivity.java
@@ -2,14 +2,11 @@ import androidx.annotation.NonNull; import androidx.appcompat.content.res.AppCompatResources; import androidx.core.app.ActivityCompat; import android.Manifest; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.location.Location; import android.location.LocationListener; import android.location.LocationManager; import android.os.Bundle; import android.os.Process; @@ -18,7 +15,6 @@ import android.text.TextUtils; import android.view.View; import com.alibaba.fastjson.JSONObject; import com.google.gson.Gson; import com.google.gson.reflect.TypeToken; import com.hdl.linkpm.sdk.core.exception.HDLException; @@ -67,7 +63,7 @@ /** * 我的电站界面 * B端-电站界面 */ public class MyPowerStationActivity extends CustomBaseActivity { app/src/main/java/com/hdl/photovoltaic/ui/StartActivity.java
@@ -1,28 +1,18 @@ package com.hdl.photovoltaic.ui; import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; import android.os.Bundle; import android.os.IBinder; import com.hdl.linkpm.sdk.core.exception.HDLException; import com.hdl.linkpm.sdk.user.HDLLinkPMUser; import com.hdl.photovoltaic.HDLApp; import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.config.AppConfigManage; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpServer; import com.hdl.photovoltaic.internet.HttpServer.MyNanoHttpService; import com.hdl.photovoltaic.listener.CloudCallBeak; import com.hdl.photovoltaic.other.HdlOtaLogic; import com.hdl.photovoltaic.other.HdlResidenceLogic; import com.hdl.photovoltaic.other.HdlThreadLogic; import com.hdl.photovoltaic.ui.bean.HouseIdBean; import com.hdl.photovoltaic.utils.AppManagerUtils; import java.util.List; @@ -47,8 +37,15 @@ public void onSuccess(List<HouseIdBean> obj) { // hideLoading(); HdlResidenceLogic.getInstance().setHouseIdList(obj); Intent intent = new Intent(); if (UserConfigManage.getInstance().isBAccount()) { //安装商跳转界面 intent.setClass(StartActivity.this, MyPowerStationActivity.class); } else { //C端用户跳转界面 intent.setClass(StartActivity.this, CPowerStationActivity.class); } startActivity(intent); finish(); } @@ -57,7 +54,13 @@ public void onFailure(HDLException e) { // hideLoading(); Intent intent = new Intent(); if (UserConfigManage.getInstance().isBAccount()) { //安装商跳转界面 intent.setClass(StartActivity.this, MyPowerStationActivity.class); } else { //C端用户跳转界面 intent.setClass(StartActivity.this, CPowerStationActivity.class); } startActivity(intent); finish(); } app/src/main/java/com/hdl/photovoltaic/ui/me/SetActivity.java
@@ -10,15 +10,10 @@ import com.hdl.linkpm.sdk.user.HDLLinkPMUser; import com.hdl.photovoltaic.R; import com.hdl.photovoltaic.base.CustomBaseActivity; import com.hdl.photovoltaic.config.ConstantManage; import com.hdl.photovoltaic.config.UserConfigManage; import com.hdl.photovoltaic.databinding.ActivitySetBinding; import com.hdl.photovoltaic.ui.MyPowerStationActivity; import com.hdl.photovoltaic.utils.LocalManageUtil; import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; import org.greenrobot.eventbus.EventBus; /** * 我的-设置-界面 app/src/main/res/layout/activity_cpower_station.xml
New file @@ -0,0 +1,9 @@ <?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".ui.CPowerStationActivity"> </androidx.constraintlayout.widget.ConstraintLayout>