2026年01月13日15:47:59 升级gradle版本
1,增加游客模式登录功能;
2,不强制阿拉伯语言布局从左到右;
| | |
| | | apply plugin: 'com.android.library' |
| | | |
| | | android { |
| | | namespace 'com.github.AAChartModel.AAChartCore' |
| | | compileSdkVersion 33 |
| | | |
| | | defaultConfig { |
| | |
| | | keyPassword '85521566' |
| | | } |
| | | } |
| | | namespace 'com.hdl.photovoltaic' |
| | | compileSdk 35 |
| | | defaultConfig { |
| | | applicationId "com.hdl.photovoltaic" |
| | | minSdk 23 |
| | | targetSdk 35 |
| | | versionCode 23 |
| | | versionName "2.0.0"//版本规则1.3是产品功能迭代用的,最后一位0是我们修复bug用的 |
| | | versionName "2.0.1"//版本规则1.3是产品功能迭代用的,最后一位0是我们修复bug用的 |
| | | testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" |
| | | multiDexEnabled true |
| | | manifestPlaceholders = mfph |
| | |
| | | ] |
| | | |
| | | } |
| | | // 保证其他的lib没有被preDex |
| | | dexOptions { |
| | | preDexLibraries = false |
| | | } |
| | | // // 保证其他的lib没有被preDex |
| | | // dexOptions { |
| | | // preDexLibraries = false |
| | | // } |
| | | repositories { |
| | | flatDir { |
| | | dirs 'libs' |
| | |
| | | // abortOnError false |
| | | // } |
| | | |
| | | packagingOptions { |
| | | jniLibs { |
| | | useLegacyPackaging true |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 打包自动命名 |
| | |
| | | buildFeatures { |
| | | viewBinding true |
| | | aidl true |
| | | buildConfig true |
| | | } |
| | | compileOptions { |
| | | sourceCompatibility JavaVersion.VERSION_1_8 |
| | |
| | | //二维码库 |
| | | implementation project(path: ':third-zxing') |
| | | //Link本地库(在线依赖网络库) |
| | | implementation 'com.hdl.android:pmsdk:1.0.18' |
| | | implementation 'com.hdl.android:pmsdk:1.0.22'//22 |
| | | // implementation 'com.hdl.android:debugsdk:1.0.71' |
| | | implementation project(path: ':sdk') |
| | | implementation 'androidx.activity:activity:1.2.3' |
| | |
| | | //********UniSDK必须添加的依赖 start******** |
| | | implementation "androidx.recyclerview:recyclerview:1.0.0" |
| | | implementation 'com.alibaba:fastjson:1.2.66'//必须集成,fastjson功能需要 |
| | | implementation 'com.facebook.fresco:fresco:2.5.0'//必须集成,图片加载需要 |
| | | implementation 'com.facebook.fresco:animated-gif:2.5.0'//必须集成,图片加载需要 |
| | | implementation 'com.facebook.fresco:webpsupport:2.5.0' |
| | | implementation 'com.facebook.fresco:animated-webp:2.5.0' |
| | | implementation 'com.github.bumptech.glide:glide:4.9.0'//必须集成,图片加载需要 |
| | | implementation 'com.facebook.fresco:fresco:3.6.0'//必须集成,图片加载需要 |
| | | implementation 'com.facebook.fresco:animated-gif:3.6.0'//必须集成,图片加载需要 |
| | | implementation 'com.facebook.fresco:webpsupport:3.6.0' |
| | | implementation 'com.facebook.fresco:animated-webp:3.6.0' |
| | | implementation 'com.github.bumptech.glide:glide:5.0.5'//必须集成,图片加载需要 |
| | | implementation 'com.android.support:multidex:1.0.3' |
| | | implementation 'androidx.webkit:webkit:1.3.0'//3.6.15版本之后 必须集成,用来支持暗黑模式 |
| | | implementation 'androidx.webkit:webkit:1.6.1'//3.6.15版本之后 必须集成,用来支持暗黑模式 |
| | | //********UniSDK必须添加的依赖 end******** |
| | | //NanoHTTPD搭建服务器 |
| | | implementation 'org.nanohttpd:nanohttpd:2.3.1' |
| | |
| | | implementation 'com.huawei.agconnect:agconnect-core:1.9.1.301' |
| | | |
| | | //友盟 |
| | | implementation 'com.umeng.umsdk:common:9.5.6'// 必选 |
| | | implementation 'com.umeng.umsdk:asms:1.6.3'// 必选 |
| | | implementation 'com.umeng.umsdk:apm:1.7.0' // 错误分析 |
| | | implementation 'com.umeng.umsdk:common:9.6.8'// 必选 |
| | | implementation 'com.umeng.umsdk:asms:1.8.0'// 必选 |
| | | // implementation 'com.umeng.umsdk:apm:1.9.2' // 错误分析,目前不支持Android 15的16KB功能适配要求。 |
| | | |
| | | //引入FCM(原生谷歌) |
| | | implementation 'com.google.firebase:firebase-messaging:23.2.1' |
| | | |
| | |
| | | implementation 'me.leolin:ShortcutBadger:1.1.22@aar' |
| | | // 阿里云推送核心库 |
| | | implementation 'com.aliyun.ams:alicloud-android-push:3.9.3' |
| | | |
| | | |
| | | |
| | | //辅助通道 |
| | |
| | | android:label="@string/app_name" |
| | | android:persistent="true" |
| | | android:requestLegacyExternalStorage="true" |
| | | android:supportsRtl="false" |
| | | android:supportsRtl="true" |
| | | android:theme="@style/Theme.PhotovoltaicDebug" |
| | | tools:replace="android:supportsRtl"> |
| | | <!-- 厂商通道专用Activity(透明中转页),创建一个透明的Activity来处理厂商通道点击 --> |
| | |
| | | |
| | | public class HDLApp extends Application { |
| | | |
| | | /** |
| | | * 添加标志位控制首次加载逻辑 |
| | | */ |
| | | public boolean isFirstLoad = true; |
| | | final String TAG = HDLApp.class.getName(); |
| | | //控制打印 Debug模式打印 |
| | | private Boolean isLogEnabled = true; |
| | |
| | | @Override |
| | | public void onCreate() { |
| | | super.onCreate(); |
| | | |
| | | // Log.d("Application==onCreate", "onCreate"); |
| | | // // 获取当前进程的PID |
| | | // String processMessage = "进程Uid:" + Process.myUid() + "进程ID:" + Process.myPid() + " 进程名:" + RuningAcitvityUtil.getAppName(getBaseContext()); |
| | | Log.d("Application==onCreate", "onCreate"); |
| | | // Log.d(TAG, processMessage); |
| | | // Log.d("Application==onCreate", processMessage); |
| | | // if (RuningAcitvityUtil.getAppName(getBaseContext()).contains(":")) { |
| | | // //非原生进程,用初始化后面的 |
| | | // return; |
| | | // } |
| | | mHDLApp = this; |
| | | SharedPreUtils.init(this); |
| | | getAppLanguage(); |
| | | //预创建脚本json文件夹 |
| | | HdlFileLogic.getInstance().createHdlDeviceModelLocalJsonDirectory(); |
| | | init(); |
| | | |
| | | |
| | |
| | | return; |
| | | } |
| | | isInitThirdSDK = true; |
| | | SharedPreUtils.init(this); |
| | | getAppLanguage(); |
| | | //预创建脚本json文件夹 |
| | | HdlFileLogic.getInstance().createHdlDeviceModelLocalJsonDirectory(); |
| | | UserConfigManage.getInstance().setTouristModeJumpLogic(UserConfigManage.getInstance().isTourist_mode()); |
| | | // //5.初始化Bugly |
| | | // CrashReport.initCrashReport(this, Constant.BUGLY_APP_ID, true); |
| | | //6.初始化DCUniMPSDK |
| | |
| | | HDLLinkPMUser.getInstance().setOnReloginListener(new IOnReloginListener() { |
| | | @Override |
| | | public void onReLogin(int type) { |
| | | // UserConfigManage.getInstance().setTourist_mode(false); |
| | | // UserConfigManage.getInstance().Save(); |
| | | if (type == LogoutType.ServerSwitchingLogout.getValue()) { |
| | | new Handler().postDelayed(new Runnable() { |
| | | @Override |
| | |
| | | private String userImageUrl = "/static/image/user-default-head.png"; |
| | | |
| | | |
| | | /// <summary> |
| | | /// 注册极光ID,谷歌FCM的令牌 |
| | | /// </summary> |
| | | /** |
| | | * 注册极光ID,谷歌FCM的令牌 |
| | | */ |
| | | private String pushToken; |
| | | /// <summary> |
| | | /// 添加令牌到云端成功时返回的 |
| | | /// </summary> |
| | | |
| | | /** |
| | | * 添加令牌到云端成功时返回的 |
| | | */ |
| | | private String pushId; |
| | | |
| | | /** |
| | |
| | | */ |
| | | private boolean noNetworkFlag = false; |
| | | |
| | | |
| | | /** |
| | | * 是否是游客模式(true=游客模式,false=正常模式) |
| | | */ |
| | | private boolean tourist_mode = false; |
| | | |
| | | |
| | | /** |
| | | * 是否是游客模式 |
| | | * @return (true=游客模式,false=正常模式) |
| | | */ |
| | | public boolean isTourist_mode() { |
| | | return tourist_mode; |
| | | } |
| | | /** |
| | | * 是否是游客模式 |
| | | * @return (true=游客模式,false=正常模式) |
| | | */ |
| | | public void setTourist_mode(boolean tourist_mode) { |
| | | this.tourist_mode = tourist_mode; |
| | | } |
| | | |
| | | |
| | | |
| | | /** |
| | | * 用来游客模式冷启动强制跳到登录界面标记 |
| | | * true=游客模式,冷启动强制跳转登录界面,false:按正常流程跑 |
| | | */ |
| | | private boolean isTouristModeJumpLogic = false; |
| | | |
| | | /** |
| | | * 用来游客模式冷启动强制跳到登录界面标记 |
| | | * @return true=游客模式,冷启动强制跳转登录界面,false:按正常流程跑 |
| | | */ |
| | | public boolean isTouristModeJumpLogic() { |
| | | return isTouristModeJumpLogic; |
| | | } |
| | | /** |
| | | * 用来游客模式冷启动强制跳到登录界面标记 |
| | | * @return true=游客模式,冷启动强制跳转登录界面,false:按正常流程跑 |
| | | */ |
| | | public void setTouristModeJumpLogic(boolean touristModeJumpLogic) { |
| | | isTouristModeJumpLogic = touristModeJumpLogic; |
| | | } |
| | | public boolean isAutomaticSkipNoNetworkFlag() { |
| | | return automaticSkipNoNetworkFlag; |
| | | } |
| | |
| | | * @param cloudCallBeak - |
| | | */ |
| | | public void pushAdd(CloudCallBeak<String> cloudCallBeak) { |
| | | //游客模式不需要消息推送,因为手动杀死应用时,自动退出游客模式 |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | return; |
| | | } |
| | | String requestUrl = HttpApi.POST_push_add; |
| | | JsonObject json = new JsonObject(); |
| | | json.addProperty("deviceName", Build.MODEL);//设备名称 |
| | |
| | | import com.hdl.photovoltaic.uni.HDLUniMPSDKManager; |
| | | import com.hdl.photovoltaic.utils.NetworkUtils; |
| | | import com.hdl.photovoltaic.utils.PermissionUtils; |
| | | import com.hdl.photovoltaic.utils.SharedPreUtils; |
| | | import com.hdl.photovoltaic.utils.WifiUtils; |
| | | import com.hdl.sdk.link.common.exception.HDLLinkException; |
| | | import com.hdl.sdk.link.core.bean.eventbus.BaseEventBus; |
| | |
| | | gatewayDriverBean.setDriverCode(driverInfoAry[0]); |
| | | gatewayDriverBean.setImageId(driverInfoAry[1]); |
| | | gatewayDriverBean.setVersion(driverInfoAry[2].replace(".zip", "")); |
| | | gatewayDriverBean.setLocalUrl(HdlFileLogic.getInstance().getDrivePathFileName(gatewayDriverBean.getDriverCode(),gatewayDriverBean.getImageId(), gatewayDriverBean.getVersion())); |
| | | gatewayDriverBean.setLocalUrl(HdlFileLogic.getInstance().getDrivePathFileName(gatewayDriverBean.getDriverCode(), gatewayDriverBean.getImageId(), gatewayDriverBean.getVersion())); |
| | | list.add(gatewayDriverBean); |
| | | } |
| | | } |
| | |
| | | @Override |
| | | public void run() { |
| | | |
| | | String drivePathFileName = HdlFileLogic.getInstance().getDrivePathFileName(driverCode,imageId, version); |
| | | String drivePathFileName = HdlFileLogic.getInstance().getDrivePathFileName(driverCode, imageId, version); |
| | | //不在子线程读流会卡死主线程 |
| | | boolean isBoolean = HdlOtaLogic.getInstance().disposeDownLoadFile(drivePathFileName, responseBody, md5, HdlOtaLogic.driver_type); |
| | | if (isBoolean) { |
| | |
| | | @Override |
| | | public void onServiceConnected(ComponentName name, IBinder service) { |
| | | //本地升级驱动文件路径 |
| | | String drivePathFileName = HdlFileLogic.getInstance().getDrivePathFileName(driverCode,imageId, version); |
| | | String drivePathFileName = HdlFileLogic.getInstance().getDrivePathFileName(driverCode, imageId, version); |
| | | byte[] data = HdlFileLogic.getInstance().readFileByte(drivePathFileName); |
| | | if (data == null || data.length == 0) { |
| | | uniCallbackData(type, null, -2, HDLApp.getInstance().getAppLocaleContext().getString(R.string.found_locally_drive_file), callback); |
| | |
| | | // data.put("appSecret", AppConfigManage.getAppSecret()); |
| | | // } |
| | | data.put("appLanguage", UserConfigManage.getInstance().getCurrentAppLanguage()); |
| | | data.put("tourist_mode", UserConfigManage.getInstance().isTourist_mode()); |
| | | uniCallBackBaseBean.setData(data); |
| | | return getJSONObject(uniCallBackBaseBean); |
| | | } catch (Exception e) { |
| | |
| | | }, 0, forgetPasswordTvStr.length(), 0); |
| | | viewBinding.homeLoginForgetPasswordTv.setText(forgetPasswordTvStrSpannable); |
| | | |
| | | LanguageAdapter.ItemData language= LocalManageUtil.getLanguage(UserConfigManage.getInstance().getCurrentAppLanguage()); |
| | | LanguageAdapter.ItemData language = LocalManageUtil.getLanguage(UserConfigManage.getInstance().getCurrentAppLanguage()); |
| | | viewBinding.homeLoginLanguageTv.setText(language.getTitle()); |
| | | |
| | | if (UserConfigManage.getInstance().isBAccount()) { |
| | |
| | | // String pws = "123456"; |
| | | //测试用 |
| | | viewBinding.homeLoginAccountEt.setText(UserConfigManage.getInstance().getAccount()); |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | //游客模式不记录账号 |
| | | viewBinding.homeLoginAccountEt.setText(""); |
| | | } |
| | | // viewBinding.homeLoginPasswordEt.setText(pws); |
| | | checkClearIconShowOrNot(viewBinding.homeLoginAccountEt.getText().toString()); |
| | | isLoginTextViewEnabled(); |
| | |
| | | viewBinding.homeLoginLanguageTv.setText(itemData.getTitle()); |
| | | } |
| | | }); |
| | | } |
| | | }); |
| | | |
| | | //游客模式 |
| | | viewBinding.homeLoginTouristTv.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | UserConfigManage.getInstance().setTourist_mode(true); |
| | | UserConfigManage.getInstance().Save(); |
| | | HDLUniMPSDKManager.isExistsActivity = false; |
| | | //游客模式登录 |
| | | loginAccount("Sales@xenterrasolar.com", "PLMOKNIJ"); |
| | | } |
| | | }); |
| | | |
| | |
| | | getAcceiptPolicyDialog(); |
| | | return; |
| | | } |
| | | UserConfigManage.getInstance().setTourist_mode(false); |
| | | UserConfigManage.getInstance().Save(); |
| | | //登录 |
| | | loginAccount(account, password); |
| | | |
| | |
| | | confirmationCancelDialog.dismiss(); |
| | | String account = viewBinding.homeLoginAccountEt.getText().toString().replace(" ", ""); |
| | | String password = viewBinding.homeLoginPasswordEt.getText().toString().replace(" ", ""); |
| | | UserConfigManage.getInstance().setTourist_mode(false); |
| | | UserConfigManage.getInstance().Save(); |
| | | loginAccount(account, password); |
| | | } |
| | | }); |
| | |
| | | if (!UserConfigManage.getInstance().isNoNetworkFlag()) { |
| | | //初始化服务器域名(用户注册所在服务器域名地址) |
| | | AppConfigManage.setUserRegionUrl(HDLLinkPMUser.getInstance().getUserRegionUrl()); |
| | | boolean isTourist = UserConfigManage.getInstance().isTouristModeJumpLogic(); |
| | | //判断AccessToken是否null |
| | | if (!TextUtils.isEmpty(HDLLinkPMUser.getInstance().getAccessToken())) { |
| | | if (!TextUtils.isEmpty(HDLLinkPMUser.getInstance().getAccessToken()) && !isTourist) { |
| | | if (UserConfigManage.getInstance().isBAccount()) { |
| | | //安装商跳转界面 |
| | | Intent intent = new Intent(); |
| | |
| | | import androidx.recyclerview.widget.RecyclerView; |
| | | |
| | | import com.hdl.photovoltaic.R; |
| | | import com.hdl.photovoltaic.config.UserConfigManage; |
| | | import com.hdl.photovoltaic.enums.DebugStatus; |
| | | import com.hdl.photovoltaic.enums.DeliverStatus; |
| | | import com.hdl.photovoltaic.enums.PowerStationStatus; |
| | |
| | | } |
| | | }); |
| | | |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | holder.home_del_ll.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | import com.hdl.photovoltaic.config.UserConfigManage; |
| | | import com.hdl.photovoltaic.databinding.FragmentHomePageBinding; |
| | | import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch; |
| | | import com.hdl.photovoltaic.enums.LogoutType; |
| | | import com.hdl.photovoltaic.enums.PowerStationStatus; |
| | | import com.hdl.photovoltaic.enums.TimeType; |
| | | import com.hdl.photovoltaic.enums.UnitType; |
| | | import com.hdl.photovoltaic.listener.CloudCallBeak; |
| | | import com.hdl.photovoltaic.listener.OnCallBeak; |
| | | import com.hdl.photovoltaic.other.HdlAccountLogic; |
| | | import com.hdl.photovoltaic.other.HdlCommonLogic; |
| | | import com.hdl.photovoltaic.other.HdlDialogLogic; |
| | | import com.hdl.photovoltaic.other.HdlLogLogic; |
| | |
| | | import com.hdl.photovoltaic.other.HdlResidenceLogic; |
| | | import com.hdl.photovoltaic.other.HdlThreadLogic; |
| | | import com.hdl.photovoltaic.other.HdlUniLogic; |
| | | import com.hdl.photovoltaic.ui.StartActivity; |
| | | import com.hdl.photovoltaic.ui.adapter.LanguageAdapter; |
| | | import com.hdl.photovoltaic.ui.bean.DataOverBean; |
| | | import com.hdl.photovoltaic.ui.bean.SocialContributionBean; |
| | | import com.hdl.photovoltaic.ui.bean.StatisticsBean; |
| | |
| | | import com.hdl.photovoltaic.utils.AppManagerUtils; |
| | | import com.hdl.photovoltaic.utils.GPSManagerUtils; |
| | | import com.hdl.photovoltaic.utils.PermissionUtils; |
| | | import com.hdl.photovoltaic.utils.SharedPreUtils; |
| | | import com.hdl.photovoltaic.utils.TimeUtils; |
| | | import com.hdl.photovoltaic.widget.AddPowerStationDialog; |
| | | import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; |
| | |
| | | } |
| | | |
| | | private void initEvent() { |
| | | viewBinding.exitTv.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | HdlAccountLogic.getInstance().logout(LogoutType.NormalLogout); |
| | | } |
| | | }); |
| | | //电站添加 |
| | | //点击进入新配置入网界面 |
| | | viewBinding.homePageStationAddIv.setOnClickListener(new View.OnClickListener() { |
| | |
| | | } |
| | | |
| | | private void initView() { |
| | | |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | viewBinding.homePageStationAddIv.setVisibility(View.GONE); |
| | | viewBinding.exitTv.setVisibility(View.VISIBLE); |
| | | } else { |
| | | viewBinding.homePageStationAddIv.setVisibility(View.VISIBLE); |
| | | viewBinding.exitTv.setVisibility(View.GONE); |
| | | } |
| | | String dataStr = TimeUtils.getDateTimestamp(TimeUtils.getCurrentTimestamp(), TimeUtils.getTimeDateFormat(timeType)); |
| | | viewBinding.yearMonthDayTv.setText(dataStr); |
| | | |
| | |
| | | package com.hdl.photovoltaic.ui.me; |
| | | |
| | | |
| | | import android.app.NotificationChannel; |
| | | import android.app.NotificationManager; |
| | | import android.app.PendingIntent; |
| | | import android.content.Context; |
| | | |
| | | import android.content.Intent; |
| | | import android.graphics.Bitmap; |
| | | import android.graphics.Color; |
| | | import android.os.Build; |
| | | import android.os.Bundle; |
| | | import android.view.View; |
| | | |
| | | import androidx.annotation.RequiresApi; |
| | | import androidx.core.app.NotificationCompat; |
| | | |
| | | import com.alibaba.fastjson.JSON; |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.alibaba.fastjson.TypeReference; |
| | | import com.hdl.linkpm.sdk.core.exception.HDLException; |
| | | import com.hdl.linkpm.sdk.user.bean.NewVersionBean; |
| | | import com.hdl.photovoltaic.R; |
| | |
| | | import com.hdl.photovoltaic.other.HdlAppUpdateLogic; |
| | | import com.hdl.photovoltaic.other.HdlCommonLogic; |
| | | import com.hdl.photovoltaic.other.HdlThreadLogic; |
| | | import com.hdl.photovoltaic.ui.BPowerStationActivity; |
| | | import com.hdl.photovoltaic.ui.CPowerStationActivity; |
| | | import com.hdl.photovoltaic.ui.StartActivity; |
| | | import com.hdl.photovoltaic.utils.BadgeUtils; |
| | | |
| | | import com.hdl.photovoltaic.widget.FlashingBoxDialog; |
| | | import com.hdl.photovoltaic.widget.apkwgtupload.ApkDownLoadService; |
| | | import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; |
| | | import com.hdl.photovoltaic.widget.UpdateConfirmationCancelDialog; |
| | | |
| | | import java.util.Map; |
| | | |
| | | /** |
| | | * 关于界面(app更新) |
| | |
| | | }, this, ShowErrorMode.YES); |
| | | } |
| | | |
| | | private void showCustomNotification(String title, String message, Map<String, String> data) { |
| | | NotificationManager notificationManager = |
| | | (NotificationManager) _mActivity.getSystemService(Context.NOTIFICATION_SERVICE); |
| | | |
| | | // 创建通知渠道(Android 8.0+) |
| | | if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { |
| | | createNotificationChannel(notificationManager); |
| | | } |
| | | |
| | | NotificationCompat.Builder builder = new NotificationCompat.Builder(_mActivity, "fcm_channel") |
| | | .setSmallIcon(R.drawable.notification_logo) |
| | | .setContentTitle(title) |
| | | .setContentText(message) |
| | | .setAutoCancel(true) |
| | | .setNumber(5) |
| | | .setWhen(System.currentTimeMillis()); |
| | | |
| | | |
| | | // 设置点击意图 |
| | | Intent intent = createNotificationIntent(data); |
| | | PendingIntent pendingIntent = PendingIntent.getActivity( |
| | | _mActivity, 0, intent, PendingIntent.FLAG_UPDATE_CURRENT | PendingIntent.FLAG_IMMUTABLE); |
| | | builder.setContentIntent(pendingIntent); |
| | | |
| | | // 显示通知 |
| | | notificationManager.notify((int) System.currentTimeMillis(), builder.build()); |
| | | } |
| | | |
| | | private Intent createNotificationIntent(Map<String, String> data) { |
| | | Intent intent = new Intent(_mActivity, StartActivity.class); |
| | | intent.putExtra("from_fcm", true); |
| | | intent.putExtra("pushData", JSON.toJSON(data).toString()); |
| | | // if (data != null) { |
| | | // for (Map.Entry<String, String> entry : data.entrySet()) { |
| | | // intent.putExtra(entry.getKey(), entry.getValue()); |
| | | // } |
| | | // } |
| | | |
| | | // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); |
| | | intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK); |
| | | return intent; |
| | | } |
| | | |
| | | @RequiresApi(api = Build.VERSION_CODES.O) |
| | | private void createNotificationChannel(NotificationManager notificationManager) { |
| | | NotificationChannel channel = new NotificationChannel( |
| | | "fcm_channel", |
| | | "FCM 消息", |
| | | NotificationManager.IMPORTANCE_HIGH |
| | | ); |
| | | channel.setDescription("Firebase Cloud Messaging 通知"); |
| | | // 启用角标 |
| | | channel.setShowBadge(true); |
| | | notificationManager.createNotificationChannel(channel); |
| | | BadgeUtils.setBadgeCount(_mActivity, 7); |
| | | } |
| | | } |
| | |
| | | import com.hdl.photovoltaic.config.UserConfigManage; |
| | | import com.hdl.photovoltaic.databinding.FragmentMeBinding; |
| | | import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch; |
| | | import com.hdl.photovoltaic.enums.LogoutType; |
| | | import com.hdl.photovoltaic.listener.CloudCallBeak; |
| | | import com.hdl.photovoltaic.other.HdlAccountLogic; |
| | | import com.hdl.photovoltaic.other.HdlLogLogic; |
| | |
| | | */ |
| | | private void initEvent() { |
| | | |
| | | viewBinding.exitTv.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | HdlAccountLogic.getInstance().logout(LogoutType.NormalLogout); |
| | | } |
| | | }); |
| | | |
| | | viewBinding.fragmentMeIconParentCl.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | return; |
| | | } |
| | | if (UserConfigManage.getInstance().isBAccount()) { |
| | | Intent intent = new Intent(); |
| | | intent.setClass(_mActivity, BPersonalDataActivity.class); |
| | |
| | | * 初始化界面 |
| | | */ |
| | | private void initView() { |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | viewBinding.exitTv.setVisibility(View.VISIBLE); |
| | | } else { |
| | | viewBinding.exitTv.setVisibility(View.GONE); |
| | | } |
| | | //设备调试 |
| | | viewBinding.fragmentMeLineDeviceDebugIl.fragmentMeLineLeftIconIv.setImageResource(R.drawable.device_debug); |
| | | viewBinding.fragmentMeLineDeviceDebugIl.fragmentMeLineTitleIv.setText(R.string.device_debugging); |
| | |
| | | setMemberAccount(UserConfigManage.getInstance().getAccount()); |
| | | // setMemberHeadIcon(UserConfigManage.getInstance().getUserImageUrl()); |
| | | |
| | | |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | viewBinding.fragmentMeUserNameNextIv.setVisibility(View.GONE); |
| | | } else { |
| | | viewBinding.fragmentMeUserNameNextIv.setVisibility(View.VISIBLE); |
| | | } |
| | | } |
| | | |
| | | public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) { |
| | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | |
| | | |
| | | } |
| | |
| | | viewBinding.setNotificationSettingsIl.lineV.setVisibility(View.GONE); |
| | | } |
| | | |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | viewBinding.outTv.setVisibility(View.GONE); |
| | | viewBinding.setAccountSecurityIl.parentCl.setVisibility(View.GONE); |
| | | viewBinding.setAccountSecurityIl.lineV.setVisibility(View.GONE); |
| | | viewBinding.setNotificationSettingsIl.parentCl.setVisibility(View.GONE); |
| | | viewBinding.setNotificationSettingsIl.lineV.setVisibility(View.GONE); |
| | | viewBinding.setContextSwitchIl.parentCl.setVisibility(View.GONE); |
| | | viewBinding.setNotificationSettingsIl.lineV.setVisibility(View.GONE); |
| | | } |
| | | } |
| | | |
| | | @Override |
| | |
| | | import com.hdl.photovoltaic.other.HdlPushLogic; |
| | | import com.hdl.photovoltaic.other.HdlResidenceLogic; |
| | | import com.hdl.photovoltaic.other.HdlThreadLogic; |
| | | import com.hdl.photovoltaic.ui.BPowerStationActivity; |
| | | import com.hdl.photovoltaic.ui.CPowerStationActivity; |
| | | import com.hdl.photovoltaic.ui.StartActivity; |
| | | import com.hdl.photovoltaic.ui.adapter.LanguageAdapter; |
| | | import com.hdl.photovoltaic.uni.HDLUniMPSDKManager; |
| | |
| | | @Override |
| | | public void run() { |
| | | hideLoading(); |
| | | UserConfigManage.getInstance().setTouristModeJumpLogic(false); |
| | | UserConfigManage.getInstance().setCurrentAppLanguage(itemData.getLanguage()); |
| | | UserConfigManage.getInstance().Save(); |
| | | //配置接口请求语言 |
| | | HDLLinkPMSdk.setLanguage(UserConfigManage.getInstance().getCurrentAppLanguage()); |
| | | |
| | | AppManagerUtils.getAppManager().finishAllActivity(); |
| | | // if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | // Intent intent = new Intent(); |
| | | // intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); |
| | | // if (UserConfigManage.getInstance().isBAccount()) { |
| | | // intent.setClass(HDLApp.getInstance(), BPowerStationActivity.class); |
| | | // } else { |
| | | // intent.setClass(HDLApp.getInstance(), CPowerStationActivity.class); |
| | | // } |
| | | // startActivity(intent); |
| | | // } else { |
| | | Intent intent = new Intent(); |
| | | intent.setClass(HDLApp.getInstance(), StartActivity.class); |
| | | startActivity(intent); |
| | | // } |
| | | HdlPushLogic.getInstance().pushAdd(new CloudCallBeak<String>() { |
| | | @Override |
| | | public void onSuccess(String pushId) { |
| | |
| | | import com.hdl.photovoltaic.enums.DebugType; |
| | | import com.hdl.photovoltaic.enums.HomepageTitleTabSwitch; |
| | | import com.hdl.photovoltaic.enums.Languages; |
| | | import com.hdl.photovoltaic.enums.LogoutType; |
| | | import com.hdl.photovoltaic.enums.LowerTagType; |
| | | import com.hdl.photovoltaic.enums.PowerStationStatus; |
| | | import com.hdl.photovoltaic.enums.ProjectOperation; |
| | |
| | | import com.hdl.photovoltaic.listener.CloudCallBeak; |
| | | import com.hdl.photovoltaic.listener.LinkCallBack; |
| | | import com.hdl.photovoltaic.listener.OnCallBeak; |
| | | import com.hdl.photovoltaic.other.HdlAccountLogic; |
| | | import com.hdl.photovoltaic.other.HdlCommonLogic; |
| | | import com.hdl.photovoltaic.other.HdlDeviceLogic; |
| | | import com.hdl.photovoltaic.other.HdlDialogLogic; |
| | |
| | | } |
| | | |
| | | private void initEvent() { |
| | | |
| | | viewBinding.exitTv.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | | public void onClick(View v) { |
| | | HdlAccountLogic.getInstance().logout(LogoutType.NormalLogout); |
| | | } |
| | | }); |
| | | //电站标签 |
| | | viewBinding.powerStationLabel.setOnClickListener(new View.OnClickListener() { |
| | | @Override |
| | |
| | | |
| | | |
| | | private void initView() { |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | viewBinding.addIv.setVisibility(View.GONE); |
| | | viewBinding.exitTv.setVisibility(View.VISIBLE); |
| | | } else { |
| | | viewBinding.addIv.setVisibility(View.VISIBLE); |
| | | viewBinding.exitTv.setVisibility(View.GONE); |
| | | } |
| | | viewBinding.powerStationLabelParent.setVisibility(View.VISIBLE); |
| | | viewBinding.deviceLabelParent.setVisibility(View.GONE); |
| | | |
| | |
| | | viewBinding.powerStationLabel.setTextAppearance(R.style.Text18Style); |
| | | viewBinding.deviceLabel.setTextAppearance(R.style.Text14Style); |
| | | // viewBinding.editIv.setVisibility(View.VISIBLE);//编辑图标隐藏 |
| | | viewBinding.addIv.setVisibility(View.VISIBLE);//添加图标隐藏 |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | viewBinding.addIv.setVisibility(View.GONE);//添加图标隐藏 |
| | | } else { |
| | | viewBinding.addIv.setVisibility(View.VISIBLE);//添加图标隐藏 |
| | | } |
| | | viewBinding.powerStationLabelParent.setVisibility(View.VISIBLE);//电站标签【父容器】显示 |
| | | viewBinding.deviceLabelParent.setVisibility(View.GONE);//设备标签【父容器】隐藏 |
| | | if (viewBinding.deviceNullDataIc.getRoot().getVisibility() == View.VISIBLE) { |
| | |
| | | viewBinding.deviceLabel.setTextAppearance(R.style.Text18Style); |
| | | viewBinding.powerStationLabel.setTextAppearance(R.style.Text14Style); |
| | | // viewBinding.editIv.setVisibility(View.GONE);//编辑图标隐藏 |
| | | viewBinding.addIv.setVisibility(View.GONE);//添加图标隐藏 |
| | | if (UserConfigManage.getInstance().isTourist_mode()) { |
| | | viewBinding.addIv.setVisibility(View.GONE);//添加图标隐藏 |
| | | } else { |
| | | viewBinding.addIv.setVisibility(View.GONE);//添加图标隐藏 |
| | | } |
| | | viewBinding.powerStationLabelParent.setVisibility(View.GONE);//电站标签【父容器】隐藏 |
| | | viewBinding.deviceLabelParent.setVisibility(View.VISIBLE);//设备标签【父容器】显示 |
| | | if (viewBinding.homeNullDataIc.getRoot().getVisibility() == View.VISIBLE) { |
| | |
| | | package com.hdl.photovoltaic.uni; |
| | | |
| | | import android.app.ActivityManager; |
| | | import android.app.Notification; |
| | | import android.app.NotificationChannel; |
| | | import android.app.NotificationManager; |
| | | import android.app.Service; |
| | | import android.content.Context; |
| | | import android.content.Intent; |
| | | import android.os.Build; |
| | | import android.os.IBinder; |
| | | import android.util.Log; |
| | | |
| | | import androidx.annotation.Nullable; |
| | | import androidx.core.app.NotificationCompat; |
| | | |
| | | import com.hdl.photovoltaic.R; |
| | | |
| | | import java.util.List; |
| | | |
| | | |
| | | public class MyForegroundService extends Service { |
| | |
| | | isRunning = true; |
| | | |
| | | } |
| | | // @Override |
| | | // public void onTaskRemoved(Intent rootIntent) { |
| | | // super.onTaskRemoved(rootIntent); |
| | | // isRunning = false; |
| | | |
| | | /// / // 停止前台状态,移除通知 |
| | | /// / stopForeground(true); // true表示移除通知 |
| | | /// /// // 停止服务 |
| | | /// /// stopSelf(); |
| | | // // 1. 先移除前台状态(可选,但建议) |
| | | // stopForeground(true); |
| | | // |
| | | // // 2. 停止服务 |
| | | // stopSelf(); |
| | | // } |
| | | @Override |
| | | public void onTaskRemoved(Intent rootIntent) { |
| | | super.onTaskRemoved(rootIntent); |
| | | // 当应用从最近任务中移除时调用 |
| | | stopForeground(true); |
| | | stopSelf(); |
| | | killAppProcess(this); |
| | | // // 3. 结束进程 |
| | | // android.os.Process.killProcess(android.os.Process.myPid()); |
| | | // System.exit(0); |
| | | } |
| | | @Override |
| | | public int onStartCommand(Intent intent, int flags, int startId) { |
| | | // 创建通知 |
| | |
| | | public void onDestroy() { |
| | | super.onDestroy(); |
| | | isRunning = false; |
| | | // 清理资源 |
| | | stopForeground(true); |
| | | } |
| | | |
| | | public static boolean isServiceRunning() { |
| | | return isRunning; |
| | | } |
| | | |
| | | /** |
| | | * 关掉app所有进程 |
| | | * |
| | | * @param context 上下文 |
| | | */ |
| | | private void killAppProcess(Context context) { |
| | | // AppManagerUtils.getAppManager().finishAllActivity(); |
| | | // Log.d("===6666666",""); |
| | | try { |
| | | android.app.ActivityManager manager = (android.app.ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); |
| | | List<ActivityManager.RunningAppProcessInfo> processInfos = manager.getRunningAppProcesses(); |
| | | // 先杀掉相关进程,最后再杀掉主进程 |
| | | for (android.app.ActivityManager.RunningAppProcessInfo runningAppProcessInfo : processInfos) { |
| | | if ((runningAppProcessInfo.uid == android.os.Process.myUid()) && (runningAppProcessInfo.pid != android.os.Process.myPid())) { |
| | | try { |
| | | android.os.Process.killProcess(runningAppProcessInfo.pid); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | } |
| | | } |
| | | |
| | | android.os.Process.killProcess(android.os.Process.myPid()); |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | System.exit(0); |
| | | } |
| | | } |
| | | |
| | |
| | | android:layout_marginStart="@dimen/dp_4" |
| | | android:src="@drawable/language_pull_down" /> |
| | | </LinearLayout> |
| | | |
| | | <TextView |
| | | android:id="@+id/home_login_tourist_tv" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="@dimen/dp_20" |
| | | android:layout_marginEnd="@dimen/dp_16" |
| | | android:layout_marginTop="@dimen/dp_60" |
| | | android:text="@string/tourist_mode" |
| | | android:textColor="@color/text_38C494" |
| | | android:textSize="@dimen/text_14" |
| | | app:layout_constraintEnd_toEndOf="parent" |
| | | app:layout_constraintTop_toTopOf="parent"/> |
| | | <!-- <TextView--> |
| | | <!-- android:id="@+id/home_login_language_tv"--> |
| | | <!-- android:layout_width="wrap_content"--> |
| | |
| | | android:layout_alignParentEnd="true" |
| | | android:layout_centerVertical="true" |
| | | android:src="@drawable/add" /> |
| | | |
| | | <TextView |
| | | android:id="@+id/exit_tv" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="@dimen/dp_20" |
| | | android:text="@string/exit" |
| | | android:textColor="@color/text_38C494" |
| | | android:textSize="@dimen/text_14" |
| | | android:layout_alignParentEnd="true" |
| | | android:layout_centerVertical="true" |
| | | android:visibility="gone" |
| | | /> |
| | | </RelativeLayout> |
| | | |
| | | <com.hdl.photovoltaic.widget.refreshlayout.BGARefreshLayout |
| | |
| | | android:layout_alignParentEnd="true" |
| | | android:layout_centerVertical="true" |
| | | android:src="@drawable/add" /> |
| | | |
| | | <TextView |
| | | android:id="@+id/exit_tv" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="@dimen/dp_20" |
| | | android:text="@string/exit" |
| | | android:textColor="@color/text_38C494" |
| | | android:textSize="@dimen/text_14" |
| | | android:layout_alignParentEnd="true" |
| | | android:layout_centerVertical="true" |
| | | android:visibility="gone" |
| | | /> |
| | | |
| | | </RelativeLayout> |
| | | <!--电站标签--> |
| | |
| | | android:layout_centerInParent="true" |
| | | android:text="@string/me" |
| | | android:textColor="@color/text_FFACACAC" |
| | | |
| | | android:textSize="@dimen/text_18" /> |
| | | |
| | | |
| | | <TextView |
| | | android:id="@+id/exit_tv" |
| | | android:layout_width="wrap_content" |
| | | android:layout_height="@dimen/dp_20" |
| | | android:text="@string/exit" |
| | | android:textColor="@color/text_38C494" |
| | | android:textSize="@dimen/text_14" |
| | | android:layout_centerInParent="true" |
| | | android:layout_alignParentEnd="true" |
| | | /> |
| | | </RelativeLayout> |
| | | |
| | | |
| | | |
| | | <androidx.constraintlayout.widget.ConstraintLayout |
| | | android:id="@+id/fragment_me_icon_parent_cl" |
| | | android:layout_width="match_parent" |
| | |
| | | <string name="re_commissioning_power_station">تم إعادة تشغيل محطة الطاقة الجديدة من طراز APP</string> |
| | | <string name="notification_settings">إعدادات الإشعارات</string> |
| | | <string name="host_process_service_channel">ممر خدمة عملية المضيف</string> |
| | | <string name="tourist_mode">وضع السياح</string> |
| | | <string name="exit">الانسحاب</string> |
| | | </resources> |
| | |
| | | <string name="re_commissioning_power_station">The Xenterra app initiates the re-commissioning of the power station</string> |
| | | <string name="notification_settings">Notification settings</string> |
| | | <string name="host_process_service_channel">Host process service channel</string> |
| | | <string name="tourist_mode">Tourist mode</string> |
| | | <string name="exit">Exit</string> |
| | | |
| | | </resources> |
| | |
| | | <string name="re_commissioning_power_station">新特锐能app发起电站重新调试</string> |
| | | <string name="notification_settings">通知设置</string> |
| | | <string name="host_process_service_channel">宿主进程服务通道</string> |
| | | <string name="tourist_mode">游客模式</string> |
| | | <string name="exit">退出</string> |
| | | </resources> |
| | |
| | | <string name="re_commissioning_power_station">The Xenterra app initiates the re-commissioning of the power station</string> |
| | | <string name="notification_settings">Notification settings</string> |
| | | <string name="host_process_service_channel">Host process service channel</string> |
| | | <string name="tourist_mode">Tourist mode</string> |
| | | <string name="exit">Exit</string> |
| | | </resources> |
| | |
| | | |
| | | buildscript { |
| | | ext { |
| | | agp_version = '4.1.3' |
| | | agp_version = '8.7.3' |
| | | } |
| | | repositories { |
| | | google() |
| | |
| | | // NOTE: Do not place your application dependencies here; they belong |
| | | // in the individual module build.gradle files |
| | | //增加AGC插件配置,以便能同步“agconnect-services.json”文件中的信息.(华为极光推送) |
| | | classpath 'com.huawei.agconnect:agcp:1.6.1.300' |
| | | classpath 'com.huawei.agconnect:agcp:1.9.1.300' |
| | | classpath 'com.google.gms:google-services:4.3.15' // Google Services 插件 |
| | | } |
| | | } |
| | |
| | | apply plugin: 'com.android.library' |
| | | |
| | | android { |
| | | namespace 'com.sahooz.library.countrypicker' |
| | | compileSdkVersion 33 |
| | | |
| | | defaultConfig { |
| | |
| | | |
| | | dependencies { |
| | | implementation fileTree(dir: 'libs', include: ['*.jar']) |
| | | androidTestCompile('androidx.test.espresso:espresso-core:3.1.0', { |
| | | androidTestImplementation('androidx.test.espresso:espresso-core:3.1.0', { |
| | | exclude group: 'com.android.support', module: 'support-annotations' |
| | | }) |
| | | implementation 'androidx.appcompat:appcompat:1.2.0' |
| | |
| | | android.nonTransitiveRClass=true |
| | | # 可以将v4,v7库转成Android X |
| | | android.enableJetifier=true |
| | | android.bundle.enableUncompressedNativeLibs=false |
| | | #android.bundle.enableUncompressedNativeLibs=false |
| | |
| | | #Wed Mar 19 11:08:39 CST 2025 |
| | | distributionBase=GRADLE_USER_HOME |
| | | distributionPath=wrapper/dists |
| | | distributionUrl=https\://services.gradle.org/distributions/gradle-6.8.3-bin.zip |
| | | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip |
| | | zipStoreBase=GRADLE_USER_HOME |
| | | zipStorePath=wrapper/dists |
| | |
| | |
|
| | |
|
| | | android {
|
| | | namespace 'com.bigkoo.pickerview'
|
| | | compileSdkVersion 33
|
| | |
|
| | | defaultConfig {
|
| | |
| | | } |
| | | |
| | | android { |
| | | namespace 'com.hdl.sdk.link' |
| | | compileSdkVersion 33 |
| | | |
| | | defaultConfig { |
| | |
| | | sourceCompatibility JavaVersion.VERSION_1_8 |
| | | targetCompatibility JavaVersion.VERSION_1_8 |
| | | } |
| | | |
| | | buildFeatures { |
| | | buildConfig = true |
| | | } |
| | | /** |
| | | * 打包自动命名 |
| | | */ |
| | |
| | | publishing { |
| | | publications { |
| | | plugin(MavenPublication) { |
| | | from components.release |
| | | from components.findByName('release') |
| | | groupId 'com.hdl.android' |
| | | version "$android.defaultConfig.versionName" |
| | | artifactId = 'debugsdk' |
| | |
| | |
|
| | |
|
| | | android {
|
| | | namespace 'com.zxing'
|
| | | compileSdkVersion 33
|
| | | buildToolsVersion "29.0.1"
|
| | |
|
| | |
| | |
|
| | |
|
| | | android {
|
| | | namespace 'com.contrarywind.view'
|
| | | compileSdkVersion 33
|
| | |
|
| | | defaultConfig {
|