package com.moral.screen.activity;
|
|
import android.Manifest;
|
import android.content.Intent;
|
import android.graphics.Point;
|
import android.os.AsyncTask;
|
import android.os.Build;
|
import android.os.Bundle;
|
import android.os.Looper;
|
import android.text.TextUtils;
|
import android.view.LayoutInflater;
|
import android.view.View;
|
import android.widget.ImageView;
|
import android.widget.LinearLayout;
|
import android.widget.TextView;
|
|
import com.baidu.mapapi.map.BaiduMap;
|
import com.baidu.mapapi.map.BitmapDescriptor;
|
import com.baidu.mapapi.map.BitmapDescriptorFactory;
|
import com.baidu.mapapi.map.InfoWindow;
|
import com.baidu.mapapi.map.MapStatus;
|
import com.baidu.mapapi.map.MapStatusUpdateFactory;
|
import com.baidu.mapapi.map.MapView;
|
import com.baidu.mapapi.map.Marker;
|
import com.baidu.mapapi.map.MarkerOptions;
|
import com.baidu.mapapi.model.LatLng;
|
import com.lzy.okgo.cache.CacheMode;
|
import com.moral.andbrickslib.utils.FastJsonTools;
|
import com.moral.screen.MainApp;
|
import com.moral.screen.common.API;
|
import com.moral.screen.httputils.HttpCallBack;
|
import com.moral.screen.model.DeviceBean;
|
import com.moral.screen.R;
|
import com.moral.screen.base.BaseActivity;
|
import com.moral.screen.update.UpdateManager;
|
|
import java.util.ArrayList;
|
import java.util.HashMap;
|
import java.util.List;
|
import java.util.Timer;
|
import java.util.TimerTask;
|
|
import pub.devrel.easypermissions.AfterPermissionGranted;
|
import pub.devrel.easypermissions.EasyPermissions;
|
|
/**
|
* Created by hjzhang on 2018/7/2.
|
*/
|
|
public class MapActivity extends BaseActivity implements EasyPermissions.PermissionCallbacks{
|
private TextView tv_left,tv_right;
|
private MapView bmapView;
|
private BaiduMap mBaiduMap;
|
BitmapDescriptor bdNormal = BitmapDescriptorFactory
|
.fromResource(R.mipmap.icon_normal);
|
BitmapDescriptor bdA = BitmapDescriptorFactory
|
.fromResource(R.mipmap.icon_level1);
|
BitmapDescriptor bdB = BitmapDescriptorFactory
|
.fromResource(R.mipmap.icon_level2);
|
BitmapDescriptor bdC = BitmapDescriptorFactory
|
.fromResource(R.mipmap.icon_level3);
|
BitmapDescriptor bdOffline = BitmapDescriptorFactory
|
.fromResource(R.mipmap.icon_offline);
|
private ArrayList<Marker> mkList = new ArrayList<>();
|
private ArrayList<DeviceBean> deviceList = new ArrayList<>();
|
private View popView;
|
private TextView tv_name,tv_address;
|
private ImageView iv_close;
|
private LinearLayout ll_pop;
|
private DeviceBean curDeviceBean;
|
private Timer timer;
|
/**
|
* 计时器
|
*/
|
private boolean isFinish = false;
|
private void showData() {
|
timer = new Timer();
|
timer.schedule(new TimerTask() {
|
@Override
|
public void run() {
|
if(!isFinish){
|
getData(false);
|
}
|
}
|
},0,10*1000);
|
}
|
@Override
|
protected void getBundleExtras(Bundle extras) {
|
|
}
|
|
@Override
|
protected int getLayoutId() {
|
return R.layout.ac_map_layout;
|
}
|
|
@Override
|
protected void initViews() {
|
tv_left = findView(R.id.tv_left);
|
tv_right = findView(R.id.tv_right);
|
bmapView = findView(R.id.bmapView);
|
popView = LayoutInflater.from(this).inflate(R.layout.pop_layout,null);
|
tv_name = popView.findViewById(R.id.tv_name);
|
tv_address = popView.findViewById(R.id.tv_address);
|
iv_close = popView.findViewById(R.id.iv_close);
|
ll_pop = popView.findViewById(R.id.ll_pop);
|
initMap();
|
}
|
|
@Override
|
protected void initListener() {
|
tv_left.setOnClickListener(this);
|
iv_close.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
mBaiduMap.hideInfoWindow();
|
}
|
});
|
ll_pop.setOnClickListener(new View.OnClickListener() {
|
@Override
|
public void onClick(View view) {
|
if("4".equals(curDeviceBean.getState())){
|
mToatUtils.showSingletonToast("该设备正在维保中...");
|
return;
|
}
|
Intent intent = new Intent(MapActivity.this,DeviceDataActivity.class);
|
intent.putExtra("deviceVersionId",curDeviceBean.getDeviceVersionId());
|
intent.putExtra("mac",curDeviceBean.getMac());
|
intent.putExtra("deviceId",curDeviceBean.getId());
|
startActivity(intent);
|
}
|
});
|
tv_right.setOnClickListener(this);
|
}
|
|
@Override
|
protected void initData() {
|
getData(true);
|
showData();
|
/**
|
* 版本更新
|
*/
|
if (Build.VERSION.SDK_INT >= 11) {
|
new checkUpdateTask().executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
|
} else {
|
new checkUpdateTask().execute();
|
}
|
}
|
|
@Override
|
protected void processClick(View view) {
|
switch (view.getId()){
|
case R.id.tv_left:
|
finish();
|
break;
|
case R.id.tv_right:
|
MainApp.theApp.mSharedPreferencesUtil.exitLogin();
|
Intent intent = new Intent(MapActivity.this,LoginActivity.class);
|
startActivity(intent);
|
finish();
|
break;
|
}
|
|
}
|
|
@Override
|
protected void onErrorPageClick() {
|
|
}
|
|
private void initMap(){
|
mBaiduMap = bmapView.getMap();
|
// 开启定位图层
|
mBaiduMap.setMyLocationEnabled(true);
|
|
mBaiduMap.setOnMarkerClickListener(new BaiduMap.OnMarkerClickListener() {
|
public boolean onMarkerClick(final Marker marker) {
|
if (marker != null) {
|
curDeviceBean = deviceList.get(marker.getZIndex());
|
tv_address.setText("地址:"+curDeviceBean.getAddress());
|
tv_name.setText(curDeviceBean.getName());
|
final LatLng ll = marker.getPosition();
|
InfoWindow mInfoWindow;
|
Point p = mBaiduMap.getProjection().toScreenLocation(ll);
|
p.y -= 47;
|
LatLng llInfo = mBaiduMap.getProjection().fromScreenLocation(p);
|
//为弹出的InfoWindow添加点击事件
|
mInfoWindow = new InfoWindow(popView,llInfo,0);
|
mBaiduMap.showInfoWindow(mInfoWindow);
|
}
|
return true;
|
}
|
});
|
}
|
|
/**
|
* 标注地图
|
*/
|
private void showMapData(boolean show){
|
mBaiduMap.clear();
|
MarkerOptions mo = null;
|
Marker mMarker = null;
|
LatLng ll = null;
|
for (int i = 0; i < deviceList.size(); i++) {
|
DeviceBean bean = deviceList.get(i);
|
double lat = bean.getLatitude();
|
double lon = bean.getLongitude();
|
ll = new LatLng(lat, lon);
|
// 0 正常
|
// 1 一级警报
|
// 2 二级警报
|
// 3 三级警报
|
// 4 维保
|
if ("0".equals(bean.getState())) {
|
mo = new MarkerOptions().position(ll).icon(bdNormal)
|
.zIndex(i);
|
} else if ("1".equals(bean.getState())) {
|
mo = new MarkerOptions().position(ll).icon(bdA)
|
.zIndex(i);
|
} else if ("2".equals(bean.getState())) {
|
mo = new MarkerOptions().position(ll).icon(bdB)
|
.zIndex(i);
|
}else if ("3".equals(bean.getState())) {
|
mo = new MarkerOptions().position(ll).icon(bdC)
|
.zIndex(i);
|
}else if ("4".equals(bean.getState())) {
|
mo = new MarkerOptions().position(ll).icon(bdOffline)
|
.zIndex(i);
|
}
|
// 掉下动画
|
if(show)
|
mo.animateType(MarkerOptions.MarkerAnimateType.grow);
|
mMarker = (Marker) (mBaiduMap.addOverlay(mo));
|
mkList.add(mMarker);
|
}
|
}
|
|
@Override
|
public void onResume() {
|
super.onResume();
|
bmapView.onResume();
|
}
|
|
@Override
|
public void onPause() {
|
super.onPause();
|
bmapView.onPause();
|
}
|
|
@Override
|
public void onDestroy() {
|
bdNormal.recycle();
|
bdOffline.recycle();
|
bdA.recycle();
|
bdB.recycle();
|
bdC.recycle();
|
super.onDestroy();
|
bmapView.onDestroy();
|
if(timer!=null){
|
timer.cancel();
|
timer =null;
|
}
|
}
|
|
private void getData(final boolean show) {
|
HashMap<String, String> params = new HashMap<>();
|
params.put("organizationId", MainApp.theApp.orgId+"");
|
mHttpUtils.doGet(API.DEVICES, params, CacheMode.DEFAULT, show, new HttpCallBack() {
|
@Override
|
public void onSuccess(String res, String msg) {
|
if (progressDialog.isShowing()) {
|
progressDialog.dismiss();
|
}
|
ArrayList<DeviceBean> temp = (ArrayList<DeviceBean>) FastJsonTools.getArrayJson(res,DeviceBean.class);
|
if(temp!=null){
|
deviceList.clear();
|
deviceList.addAll(temp);
|
}
|
if(show){
|
if(deviceList.size()>0){
|
DeviceBean bean = deviceList.get(0);
|
LatLng ll = new LatLng(bean.getLatitude(),
|
bean.getLongitude());
|
MapStatus.Builder builder = new MapStatus.Builder();
|
builder.target(ll).zoom(18.0f);
|
mBaiduMap.animateMapStatus(MapStatusUpdateFactory.newMapStatus(builder.build()));
|
}
|
}
|
showMapData(show);
|
}
|
|
@Override
|
public void showLoadingDialog() {
|
progressDialog.setTitleText("正在获取数据...");
|
progressDialog.show();
|
}
|
|
@Override
|
public void onFail(int errno, String s) {
|
mToatUtils.showSingletonToast(s);
|
if (progressDialog.isShowing()) {
|
progressDialog.dismiss();
|
}
|
}
|
});
|
|
}
|
|
|
@Override
|
public void onPermissionsGranted(int requestCode, List<String> perms) {
|
if (requestCode == WRITE_EXTERNAL_STORAGE) {
|
manager.showNoticeDialog();
|
}
|
}
|
|
@Override
|
public void onPermissionsDenied(int requestCode, List<String> perms) {
|
|
}
|
|
private final static int WRITE_EXTERNAL_STORAGE = 0x01;
|
|
@AfterPermissionGranted(WRITE_EXTERNAL_STORAGE)
|
public void updateAPP() {
|
String[] perms = {Manifest.permission.WRITE_EXTERNAL_STORAGE};
|
if (EasyPermissions.hasPermissions(this, perms)) {
|
// Already have permission, do the thing
|
manager.showNoticeDialog();
|
} else {
|
// Do not have permissions, request them now
|
EasyPermissions.requestPermissions(this, "温馨提示,版本升级需要写存储权限!",
|
WRITE_EXTERNAL_STORAGE, perms);
|
}
|
}
|
|
UpdateManager manager = new UpdateManager(MapActivity.this);
|
|
private class checkUpdateTask extends AsyncTask<String, Void, String> {
|
@Override
|
protected String doInBackground(String... params) {
|
Looper.prepare();
|
// 检查软件更新
|
manager.checkUpdateJson();
|
Looper.loop();
|
return null;
|
}
|
|
@Override
|
protected void onPostExecute(String result) {
|
}
|
|
@Override
|
protected void onPreExecute() {
|
}
|
|
@Override
|
protected void onProgressUpdate(Void... values) {
|
}
|
}
|
}
|