| | |
| | | |
| | | import androidx.annotation.NonNull; |
| | | import androidx.appcompat.content.res.AppCompatResources; |
| | | import androidx.core.app.ActivityCompat; |
| | | |
| | | import android.Manifest; |
| | | import android.content.IntentFilter; |
| | | 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.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; |
| | | 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.broadcast.NetworkChangeReceiver; |
| | | 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.NetworkType; |
| | | import com.hdl.photovoltaic.listener.CloudCallBeak; |
| | | import com.hdl.photovoltaic.other.HdlCommonLogic; |
| | | import com.hdl.photovoltaic.other.HdlDeviceLogic; |
| | | import com.hdl.photovoltaic.other.HdlLogLogic; |
| | | 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.uni.HDLUniMP; |
| | | import com.hdl.photovoltaic.utils.AppManagerUtils; |
| | | import com.hdl.photovoltaic.utils.PermissionUtils; |
| | | import com.hdl.photovoltaic.widget.ConfirmationCancelDialog; |
| | | import com.hdl.sdk.link.HDLLinkLocalSdk; |
| | | import com.hdl.sdk.link.common.event.EventListener; |
| | | import com.hdl.sdk.link.core.bean.LinkResponse; |
| | |
| | | import java.lang.reflect.Type; |
| | | import java.util.List; |
| | | |
| | | import cn.jpush.android.api.JPushInterface; |
| | | |
| | | |
| | | /** |
| | | * 我的电站界面 |
| | |
| | | private ActivityMyPowerStationBinding viewBinding; |
| | | private int currentFragmentIndex = 1; |
| | | private EventListener allTopicsListener; |
| | | |
| | | private int backPressTimes; |
| | | |
| | | private NetworkChangeReceiver networkChangeReceiver; |
| | | |
| | | |
| | | @Override |
| | | public Object getContentView() { |
| | |
| | | this.registerAllTopicsListener(); |
| | | //初始化mqtt客户端 |
| | | this.initMqttClient(); |
| | | //监听网络状态变化 |
| | | this.networkMonitoring(); |
| | | //上传极光注册ID到云端 |
| | | this.pushTokens(); |
| | | //点击极光通知栏消息进来 |
| | | this.clickJpushNotificationMessage(); |
| | | //通知限权 |
| | | this.notificationSet(); |
| | | //初始化权限 |
| | | this.requestPermissions(); |
| | | |
| | | // HdlOtaLogic.getInstance().startLocalService(new ServiceConnection() { |
| | | // @Override |
| | | // public void onServiceConnected(ComponentName name, IBinder service) { |
| | | // |
| | | // } |
| | | // |
| | | // @Override |
| | | // public void onServiceDisconnected(ComponentName name) { |
| | | // |
| | | // } |
| | | // }); |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 上传极光注册ID到云端 |
| | | */ |
| | | private void pushTokens() { |
| | | String is_registrationID = HDLApp.getInstance().getKey("registrationID"); |
| | | 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", "true");//记录一下状态,后台杀死app会清空; |
| | | HdlLogLogic.print("添加极光ID到云端--->registrationID:" + finalRegistrationID, true); |
| | | |
| | | } |
| | | |
| | | @Override |
| | | public void onFailure(HDLException e) { |
| | | HdlLogLogic.print("添加极光ID到云端失败--->registrationID:" + finalRegistrationID, true); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | |
| | | |
| | | } |
| | | }); |
| | | } |
| | | |
| | | /** |
| | | * 监听网络状态变化 |
| | | * 开启通知权限 |
| | | */ |
| | | private void networkMonitoring() { |
| | | IntentFilter intentFilter = new IntentFilter(); |
| | | intentFilter.addAction("android.net.conn.CONNECTIVITY_CHANGE"); |
| | | networkChangeReceiver = new NetworkChangeReceiver(); |
| | | registerReceiver(networkChangeReceiver, intentFilter); |
| | | private void notificationSet() { |
| | | 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.setYesOnclickListener(new ConfirmationCancelDialog.onYesOnclickListener() { |
| | | @Override |
| | | public void Confirm() { |
| | | confirmationCancelDialog.dismiss(); |
| | | PermissionUtils.openNotificationSettings(_mActivity); |
| | | |
| | | } |
| | | }); |
| | | confirmationCancelDialog.setNoOnclickListener(new ConfirmationCancelDialog.onNoOnclickListener() { |
| | | @Override |
| | | public void Cancel() { |
| | | confirmationCancelDialog.dismiss(); |
| | | } |
| | | }); |
| | | |
| | | } |
| | | } |
| | | |
| | | |
| | | private void initEvent() { |
| | | viewBinding.myPowerStationBottomIl1.clickTv.setOnClickListener(new View.OnClickListener() { |
| | |
| | | currentFragmentIndex = 2; |
| | | bottomViewChangeOfStyle(); |
| | | postEventBus(HomepageTitleTabSwitch.message); |
| | | |
| | | } |
| | | }); |
| | | viewBinding.myMeBottomIl3.clickTv.setOnClickListener(new View.OnClickListener() { |
| | |
| | | |
| | | } |
| | | |
| | | |
| | | @Override |
| | | protected void onDestroy() { |
| | | super.onDestroy(); |
| | | HdlUniLogic.getInstance().checkRemoveOtherUniMPEventCallBack(); |
| | | //移除监听 |
| | | HDLLinkLocalSdk.getInstance().removeAllTopicsListener(allTopicsListener); |
| | | //移除监听网络状态变化 |
| | | unregisterReceiver(networkChangeReceiver); |
| | | |
| | | } |
| | | |
| | | private void initView() { |
| | | viewBinding.myPowerStationBottomIl1.titleTv.setText("首页");// |
| | | viewBinding.myPowerStationBottomIl1.titleTv.setText(R.string.power_shome_page);// |
| | | viewBinding.myMessageBottomIl2.titleTv.setText(R.string.message); |
| | | viewBinding.myMeBottomIl3.titleTv.setText(R.string.power_station_me); |
| | | this.bottomViewChangeOfStyle(); |
| | |
| | | BaseEventBus baseEventBus = new BaseEventBus(); |
| | | baseEventBus.setTopic(ConstantManage.homepage_title_tab_switch); |
| | | baseEventBus.setType(tabSwitch.toString()); |
| | | EventBus.getDefault().post(baseEventBus); |
| | | EventBus.getDefault().postSticky(baseEventBus); |
| | | } |
| | | |
| | | public void requestPermissions() { |
| | | String[] ary = PermissionUtils.checkPermission(_mActivity, new String[]{Manifest.permission.ACCESS_FINE_LOCATION}); |
| | | //Manifest.permission.ACCESS_COARSE_LOCATION |
| | | //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) { |
| | | requestPermissions(ary, PermissionUtils.STATUS_SUCCESS); |
| | | this.requestPermissions(ary, PermissionUtils.STATUS_SUCCESS); |
| | | } else { |
| | | if (mPermissionsResultCallback != null) { |
| | | mPermissionsResultCallback.succeed(); |
| | | } |
| | | locationUpdates(); |
| | | } |
| | | } |
| | | |
| | |
| | | if (requestCode == PermissionUtils.STATUS_SUCCESS) { |
| | | for (int i = 0; i < permissions.length; i++) { |
| | | if (grantResults[i] == PackageManager.PERMISSION_GRANTED) { |
| | | if (mPermissionsResultCallback != null) { |
| | | mPermissionsResultCallback.succeed(); |
| | | switch (permissions[i]) { |
| | | case Manifest.permission.ACCESS_FINE_LOCATION: { |
| | | locationUpdates(); |
| | | } |
| | | break; |
| | | } |
| | | |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | |
| | | private PermissionsResultCallback mPermissionsResultCallback; |
| | | |
| | | public void setPermissionsResultCallback(PermissionsResultCallback permissionsResultCallback) { |
| | | mPermissionsResultCallback = permissionsResultCallback; |
| | | } |
| | | |
| | | public interface PermissionsResultCallback { |
| | | |
| | | void succeed(); |
| | | |
| | | void failing(); |
| | | |
| | | } |
| | | |
| | |
| | | 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) { |
| | |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | ; |
| | | HDLLinkLocalSdk.getInstance(). |
| | | |
| | | registerAllTopicsListener(allTopicsListener); |
| | | }; |
| | | HDLLinkLocalSdk.getInstance().registerAllTopicsListener(allTopicsListener); |
| | | } |
| | | |
| | | /** |
| | |
| | | @Override |
| | | public void onSuccess(List<GatewayBean> obj) { |
| | | // AppManagerUtils.getAppManager().hideLoading(); |
| | | |
| | | } |
| | | |
| | | @Override |
| | |
| | | }); |
| | | } |
| | | }); |
| | | } |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 点击极光通知栏消息进来 |
| | | */ |
| | | private void clickJpushNotificationMessage() { |
| | | Intent intent = getIntent(); |
| | | if (intent != null) { |
| | | String key = intent.getStringExtra("skip"); |
| | | if (key != null) { |
| | | //触发消息点击事件 |
| | | viewBinding.myMessageBottomIl2.clickTv.performClick(); |
| | | } |
| | | } |
| | | } |
| | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 初始化【开启定位】和【位置信息】权限 |
| | | */ |
| | | private void locationUpdates() { |
| | | // 初始化LocationManager对象 |
| | | LocationManager locationManager = (LocationManager) getSystemService(Context.LOCATION_SERVICE); |
| | | // 判断设备是否支持定位功能 |
| | | if (!locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) { |
| | | // 提示用户打开定位功能或者引导用户去系统设置页面打开定位功能 |
| | | ConfirmationCancelDialog confirmationCancelDialog = new ConfirmationCancelDialog(_mActivity); |
| | | confirmationCancelDialog.setTitle(getString(R.string.loading_title_tip)); |
| | | confirmationCancelDialog.setContent(getString(R.string.system_positioning_switch)); |
| | | confirmationCancelDialog.setConfirmation(getString(R.string.go_to_settings)); |
| | | confirmationCancelDialog.show(); |
| | | 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(); |
| | | } |
| | | }); |
| | | |
| | | } else { |
| | | // //INTERNET 允许使用网络 |
| | | // //ACCESS_FINE_LOCATION 允许使用GPS定位 |
| | | // //ACCESS_COARSE_LOCATION 允许使用WIFI热点或基站来获取粗略的定位 |
| | | // if (ActivityCompat.checkSelfPermission(_mActivity, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) { |
| | | // // TODO: Consider calling |
| | | // // ActivityCompat#requestPermissions |
| | | // // here to request the missing permissions, and then overriding |
| | | // // public void onRequestPermissionsResult(int requestCode, String[] permissions, |
| | | // // int[] grantResults) |
| | | // // to handle the case where the user grants the permission. See the documentation |
| | | // // for ActivityCompat#requestPermissions for more details. |
| | | // return; |
| | | // } |
| | | // HdlLogLogic.print("开始纬度经度--->", true); |
| | | // Location location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER); |
| | | // |
| | | // //建议这个 minTime 不小于 60000,即 1 分钟,这样会更加高效而且省电 |
| | | // locationManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, new LocationListener() { |
| | | // @Override |
| | | // public void onLocationChanged(@NonNull Location location) { |
| | | // // 当位置发生变化时调用此方法 |
| | | // double latitude = location.getLatitude(); // 获取纬度 |
| | | // double longitude = location.getLongitude(); // 获取经度 |
| | | // |
| | | // HdlLogLogic.print("纬度--->" + latitude, true); |
| | | // HdlLogLogic.print("经度--->" + longitude, true); |
| | | // } |
| | | // }); |
| | | } |
| | | |
| | | |
| | | } |
| | | |
| | | |
| | | } |