|
@@ -60,6 +60,8 @@ import java.util.Date;
|
|
|
import java.util.List;
|
|
|
import java.util.Locale;
|
|
|
import java.util.TimeZone;
|
|
|
+import java.util.Timer;
|
|
|
+import java.util.TimerTask;
|
|
|
|
|
|
/**
|
|
|
* 该类映射至Javascript中moduleDemo对象<br><br>
|
|
@@ -95,6 +97,29 @@ public class APIModuleGis extends UZModule {
|
|
|
|
|
|
private volatile static String logCorsCod = "";//连接状态:0登录成功 1:登录失败
|
|
|
|
|
|
+ //TODO Lx 统一断开所有的服务
|
|
|
+ public ModuleResult jsmethod_stopAllService_sync(final UZModuleContext context){
|
|
|
+ JSONObject res = new JSONObject();
|
|
|
+ try {
|
|
|
+ res.put("code", "0");
|
|
|
+ res.put("msg", "");
|
|
|
+
|
|
|
+ DiffConnectManager.loginOutCors(this.context());
|
|
|
+ //TODO 无异常
|
|
|
+ logCorsCod = "1";
|
|
|
+
|
|
|
+ ReceiverConnectProxy.getInstance().disConnect();
|
|
|
+ //TODO 无异常
|
|
|
+ connectCode = "1";
|
|
|
+
|
|
|
+ onUnBindClick();
|
|
|
+ bindCode = "1";
|
|
|
+ }catch(Exception ex){
|
|
|
+ Log.i(TAG,ex.getLocalizedMessage());
|
|
|
+ }
|
|
|
+ return new ModuleResult(res);
|
|
|
+ }
|
|
|
+
|
|
|
//TODO Lx 获取经纬度
|
|
|
public ModuleResult jsmethod_gisLatLng_sync(final UZModuleContext context){
|
|
|
String code = "1";//0表示成功;1表示失败
|
|
@@ -103,31 +128,83 @@ public class APIModuleGis extends UZModule {
|
|
|
try {
|
|
|
res.put("code",code);
|
|
|
res.put("msg",msg);
|
|
|
+ res.put("version","1.0.7");
|
|
|
|
|
|
- //TODO 做连接状态字段connectCode的监听
|
|
|
- long time = System.currentTimeMillis();
|
|
|
- while (true) {
|
|
|
- if(System.currentTimeMillis() - time < 3 * 1000) {
|
|
|
- if ("0".equals(connectCode)) {
|
|
|
- //TODO 说明已经调用过启动连接方法,并且连接成功
|
|
|
- //TODO 而且还要满足此时经纬度返回已经不是0.0了
|
|
|
- if(!"0.0".equals(wgslat)&&!"0.0".equals(wgslng)) {
|
|
|
- code = "0";
|
|
|
- res.put("code", code);
|
|
|
- JSONObject gisObj = new JSONObject();
|
|
|
- gisObj.put("wgslat", wgslat);
|
|
|
- gisObj.put("wgslng", wgslng);
|
|
|
- gisObj.put("wgsblh", wgsblh);
|
|
|
- gisObj.put("postType", postType);
|
|
|
- res.put("data", gisObj);
|
|
|
- break;
|
|
|
- }
|
|
|
- }
|
|
|
- }else{
|
|
|
- //TODO 说明超时
|
|
|
- msg = "获取超时";
|
|
|
- res.put("msg",msg);
|
|
|
- break;
|
|
|
+ code = "0";
|
|
|
+ res.put("code", code);
|
|
|
+ JSONObject gisObj = new JSONObject();
|
|
|
+ if(!"0.0".equals(wgslat)&&!"0.0".equals(wgslng)) {
|
|
|
+ gisObj.put("wgslat", wgslat);
|
|
|
+ gisObj.put("wgslng", wgslng);
|
|
|
+ gisObj.put("wgsblh", wgsblh);
|
|
|
+ }else{
|
|
|
+ gisObj.put("wgslat", "0.0".equals(wgslat)?"":wgslat);
|
|
|
+ gisObj.put("wgslng", "0.0".equals(wgslng)?"":wgslng);
|
|
|
+ gisObj.put("wgsblh", "0.0".equals(wgsblh)?"":wgsblh);
|
|
|
+ }
|
|
|
+
|
|
|
+ gisObj.put("postType", postType);
|
|
|
+
|
|
|
+ //TODO 连接状态返回
|
|
|
+ gisObj.put("bindCode",bindCode);
|
|
|
+ gisObj.put("connectCode",connectCode);
|
|
|
+ gisObj.put("logCorsCod",logCorsCod);
|
|
|
+
|
|
|
+ //TODO 当前连接的信息
|
|
|
+ gisObj.put("ramRtkName",ramRtkName);//RTK设备名称
|
|
|
+ gisObj.put("ramIp",ramIp);//corsIp
|
|
|
+ gisObj.put("ramPort",ramPort);//端口
|
|
|
+ gisObj.put("ramMountName",ramMountName);//源名称
|
|
|
+ gisObj.put("ramCorsUserName",ramCorsUserName);//用户名
|
|
|
+ gisObj.put("ramCorsPassword",ramCorsPassword);//密码
|
|
|
+
|
|
|
+ res.put("data", gisObj);
|
|
|
+
|
|
|
+ //TODO 大逻辑 是否重连判断
|
|
|
+ String rtkName = context.optString("rtkName");
|
|
|
+ //TODO cors相关判断 , 全传就登录, 有一个没传就不登
|
|
|
+ String ip = context.optString("ip");
|
|
|
+ Integer port = Integer.valueOf(context.optString("port"));
|
|
|
+ String mountName = context.optString("mountName");
|
|
|
+ String userName = context.optString("userName");
|
|
|
+ String passWord = context.optString("passWord");
|
|
|
+
|
|
|
+ //TODO rtk连接比cors连接优先级要高
|
|
|
+ if(rtkName!=null&&rtkName.length()>0){
|
|
|
+ if(!rtkName.equals(ramRtkName)){
|
|
|
+ //TODO 说明RTK 更换名称了 , 断开原连接再重新发送连接
|
|
|
+ ReceiverConnectProxy.getInstance().disConnect();
|
|
|
+ DiffConnectManager.loginOutCors(this.context());
|
|
|
+ connectCode = "1";
|
|
|
+ logCorsCod = "1";
|
|
|
+ startSendMessage(res,context);
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //TODO 说明RTK 没传, 就断开连接
|
|
|
+ ReceiverConnectProxy.getInstance().disConnect();
|
|
|
+ DiffConnectManager.loginOutCors(this.context());
|
|
|
+ connectCode = "1";
|
|
|
+ logCorsCod = "1";
|
|
|
+ }
|
|
|
+ //TODO cors更换
|
|
|
+ if((ip!=null&&!ip.equals(ramIp))||(port!=null&&!port.equals(ramPort))
|
|
|
+ ||(mountName!=null&&!mountName.equals(ramMountName))
|
|
|
+ ||(userName!=null&&!userName.equals(ramCorsUserName))
|
|
|
+ ||(passWord!=null&&!passWord.equals(ramCorsPassword))){
|
|
|
+ //TODO 有一个条件不一致就要重连 cors
|
|
|
+ DiffConnectManager.loginOutCors(this.context());
|
|
|
+ if(ip!=null&&ip.length()>0&&
|
|
|
+ port!=null&&
|
|
|
+ mountName!=null&&mountName.length()>0&&
|
|
|
+ userName!=null&&userName.length()>0&&
|
|
|
+ passWord!=null&&passWord.length()>0){
|
|
|
+ //TODO 重连必须满足以上条件
|
|
|
+ DiffConnectManager.loginCors(this.context(),ip,port,mountName,userName,passWord);
|
|
|
+ ramIp = ip;
|
|
|
+ ramPort = port;
|
|
|
+ ramMountName = mountName;
|
|
|
+ ramCorsUserName = userName;
|
|
|
+ ramCorsPassword = passWord;
|
|
|
}
|
|
|
}
|
|
|
}catch (Exception ex){
|
|
@@ -452,6 +529,190 @@ public class APIModuleGis extends UZModule {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+ //TODO 当前连接的rtk和 cors 账号内存信息
|
|
|
+ private volatile static String ramRtkName = null;
|
|
|
+
|
|
|
+ //TODO 当前登录cors相关
|
|
|
+ private volatile static String ramIp = null;
|
|
|
+ private volatile static Integer ramPort = null;
|
|
|
+ private volatile static String ramMountName = null;
|
|
|
+ private volatile static String ramCorsUserName = null;
|
|
|
+ private volatile static String ramCorsPassword = null;
|
|
|
+
|
|
|
+ //TODO Lx 高效率并简洁启动gisService服务并发送连接
|
|
|
+ public ModuleResult jsmethod_startGisAndSend_sync(UZModuleContext moduleContext){
|
|
|
+ JSONObject res = new JSONObject();
|
|
|
+ String code = "1";
|
|
|
+ String msg = "error";
|
|
|
+ try{
|
|
|
+ //TODO 启动服务相关判断
|
|
|
+ res.put("code",code);
|
|
|
+ res.put("msg",msg);
|
|
|
+ startSendMessage(res,moduleContext);
|
|
|
+ return new ModuleResult(res);
|
|
|
+ }catch(Exception ex){
|
|
|
+ code = "1";
|
|
|
+ msg = "errorException";
|
|
|
+ try{res.put("code",code);res.put("msg",msg);}catch(Exception e){}
|
|
|
+ Log.e(TAG,ex.getLocalizedMessage());
|
|
|
+ return new ModuleResult(res);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //TODO 统一启动服务和发送连接命令
|
|
|
+ private void startSendMessage(JSONObject res,UZModuleContext moduleContext) throws JSONException {
|
|
|
+ BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
|
|
|
+ if (adapter == null) {
|
|
|
+ res.put("code","2");
|
|
|
+ res.put("msg","本机没有找到蓝牙硬件或驱动!");
|
|
|
+ } else {
|
|
|
+ if (!adapter.isEnabled()) {
|
|
|
+ //直接开启蓝牙
|
|
|
+ adapter.enable();
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (ContextCompat.checkSelfPermission(this.context(), Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
|
|
|
+ res.put("code","3");
|
|
|
+ res.put("msg","定位授权:请授予APP位置访问权限,以便应用可检测外围设备");
|
|
|
+ }
|
|
|
+
|
|
|
+ //TODO 连接相关判断
|
|
|
+ String rtkName = moduleContext.optString("rtkName");
|
|
|
+ if(rtkName==null||"".equals(rtkName)){
|
|
|
+ res.put("code","4");
|
|
|
+ res.put("msg","配对设备参数不存在");
|
|
|
+ }
|
|
|
+ //打开蓝牙
|
|
|
+ if (!BlueUtils.isOpen()) {
|
|
|
+ //Util.showOnUiThreadToast(this, "请打开蓝牙进行手机蓝牙配对!");
|
|
|
+// errorPromote(this, "温馨提示", "请在设置页面打开手机蓝牙配对连接!");
|
|
|
+ res.put("code","5");
|
|
|
+ res.put("msg","请在设置页面打开手机蓝牙配对连接!");
|
|
|
+ }
|
|
|
+ List<String> arrBle = BlueUtils.getBluetoothDevice(BleStatusDefine.CONNECTED);
|
|
|
+ if (arrBle != null && arrBle.size() > 0) {
|
|
|
+ for (int i = arrBle.size() - 1; i >= 0; i--) {
|
|
|
+ if (!arrBle.get(i).startsWith("GNSS"))
|
|
|
+ arrBle.remove(i);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (arrBle == null || arrBle.size() <= 0) {
|
|
|
+// errorPromote(this, "温馨提示", "没有已配对连接的RTK蓝牙设备!");
|
|
|
+ res.put("code","6");
|
|
|
+ res.put("msg","没有已配对连接的RTK蓝牙设备!");
|
|
|
+ }
|
|
|
+ if(!arrBle.contains(rtkName)){
|
|
|
+ res.put("code","7");
|
|
|
+ res.put("msg","您选择的设备"+rtkName+"未配对,请重新选择或在手机蓝牙设置页重新配对");
|
|
|
+ }
|
|
|
+ //TODO cors相关判断 , 全传就登录, 有一个没传就不登
|
|
|
+ String ip = moduleContext.optString("ip");
|
|
|
+ Integer port = Integer.valueOf(moduleContext.optString("port"));
|
|
|
+ String mountName = moduleContext.optString("mountName");
|
|
|
+ String userName = moduleContext.optString("userName");
|
|
|
+ String passWord = moduleContext.optString("passWord");
|
|
|
+
|
|
|
+ if (!EventBus.getDefault().isRegistered(this)) {
|
|
|
+ EventBus.getDefault().register(this);
|
|
|
+ }
|
|
|
+ if (checkPermissionEnable(PERMISSIONS)) {
|
|
|
+ //TODO ①先绑服务
|
|
|
+ if(!"0".equals(bindCode)){
|
|
|
+ initGnss();
|
|
|
+ if (!EventBus.getDefault().isRegistered(this)) {
|
|
|
+ EventBus.getDefault().register(this);
|
|
|
+ }
|
|
|
+ onBindClick();
|
|
|
+ }
|
|
|
+ Context thisContext = this.context();
|
|
|
+ //TODO ②发送连接
|
|
|
+ Timer timer = new Timer();
|
|
|
+ timer.schedule(new TimerTask() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ if(!"0".equals(connectCode)) {
|
|
|
+ ReceiverConnectProxy.getInstance().connByBluetooth(rtkName);
|
|
|
+ }else{
|
|
|
+ //TODO rtk连接比cors连接优先级要高
|
|
|
+ if(rtkName!=null&&rtkName.length()>0){
|
|
|
+ if(!rtkName.equals(ramRtkName)){
|
|
|
+ //TODO 说明RTK 更换名称了 , 断开原连接再重新发送连接
|
|
|
+ ReceiverConnectProxy.getInstance().disConnect();
|
|
|
+ DiffConnectManager.loginOutCors(thisContext);
|
|
|
+ connectCode = "1";
|
|
|
+ logCorsCod = "1";
|
|
|
+ try {
|
|
|
+ ReceiverConnectProxy.getInstance().connByBluetooth(rtkName);
|
|
|
+ } catch (Exception e) {
|
|
|
+ throw new RuntimeException(e);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }else{
|
|
|
+ //TODO 说明RTK 没传, 就断开连接
|
|
|
+ ReceiverConnectProxy.getInstance().disConnect();
|
|
|
+ DiffConnectManager.loginOutCors(thisContext);
|
|
|
+ connectCode = "1";
|
|
|
+ logCorsCod = "1";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },1000);
|
|
|
+
|
|
|
+ //TODO ③登录cors
|
|
|
+ if(ip!=null&&ip.length()>0&&
|
|
|
+ port!=null&&
|
|
|
+ mountName!=null&&mountName.length()>0&&
|
|
|
+ userName!=null&&userName.length()>0&&
|
|
|
+ passWord!=null&&passWord.length()>0){
|
|
|
+ Timer timer2 = new Timer();
|
|
|
+ Context corsContext = this.context();
|
|
|
+ timer2.schedule(new TimerTask() {
|
|
|
+ @Override
|
|
|
+ public void run() {
|
|
|
+ if(!"0".equals(logCorsCod)){
|
|
|
+ DiffConnectManager.loginCors(corsContext,ip,port,mountName,userName,passWord);
|
|
|
+ }else{
|
|
|
+ //TODO cors更换
|
|
|
+ if((ip!=null&&!ip.equals(ramIp))||(port!=null&&!port.equals(ramPort))
|
|
|
+ ||(mountName!=null&&!mountName.equals(ramMountName))
|
|
|
+ ||(userName!=null&&!userName.equals(ramCorsUserName))
|
|
|
+ ||(passWord!=null&&!passWord.equals(ramCorsPassword))){
|
|
|
+ //TODO 有一个条件不一致就要重连 cors
|
|
|
+ DiffConnectManager.loginOutCors(thisContext);
|
|
|
+ if(ip!=null&&ip.length()>0&&
|
|
|
+ port!=null&&
|
|
|
+ mountName!=null&&mountName.length()>0&&
|
|
|
+ userName!=null&&userName.length()>0&&
|
|
|
+ passWord!=null&&passWord.length()>0){
|
|
|
+ //TODO 重连必须满足以上条件
|
|
|
+ DiffConnectManager.loginCors(thisContext,ip,port,mountName,userName,passWord);
|
|
|
+ ramIp = ip;
|
|
|
+ ramPort = port;
|
|
|
+ ramMountName = mountName;
|
|
|
+ ramCorsUserName = userName;
|
|
|
+ ramCorsPassword = passWord;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ },1500);
|
|
|
+ }
|
|
|
+
|
|
|
+ //static 内存赋值
|
|
|
+ ramRtkName = rtkName;
|
|
|
+ ramIp = ip;
|
|
|
+ ramPort = port;
|
|
|
+ ramMountName = mountName;
|
|
|
+ ramCorsUserName = userName;
|
|
|
+ ramCorsPassword = passWord;
|
|
|
+
|
|
|
+ res.put("code","0");
|
|
|
+ res.put("msg","success");
|
|
|
+ }else {
|
|
|
+ ActivityCompat.requestPermissions(this.activity(), PERMISSIONS, REQUEST_PERMISSION);
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
//TODO Lx 销毁服务绑定
|
|
|
public ModuleResult jsmethod_stopGisService_sync(final UZModuleContext context) {
|
|
|
String code = "1";//0表示成功;1表示失败
|