1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147 |
- package com.example.moduleGis;
- import android.Manifest;
- import android.app.Activity;
- import android.app.AlertDialog;
- import android.bluetooth.BluetoothAdapter;
- import android.content.Context;
- import android.content.DialogInterface;
- import android.content.DialogInterface.OnClickListener;
- import android.content.Intent;
- import android.content.pm.PackageManager;
- import android.net.Uri;
- import android.os.Build;
- import android.os.Vibrator;
- import android.provider.Settings;
- import android.support.annotation.NonNull;
- import android.support.v4.app.ActivityCompat;
- import android.support.v4.content.ContextCompat;
- import android.util.Log;
- import android.view.Gravity;
- import android.view.ViewGroup;
- import android.view.animation.Animation;
- import android.view.animation.TranslateAnimation;
- import android.widget.RelativeLayout;
- import android.widget.TextView;
- import android.widget.Toast;
- import com.example.moduleGis.gnsstest.DiffConnectManager;
- import com.example.moduleGis.gnsstest.GnssListener;
- import com.example.moduleGis.gnsstest.GnssServiceManager;
- import com.example.moduleGis.gnsstest.ReceiverConnectProxy;
- import com.example.moduleGis.gnsstest.consts.BleStatusDefine;
- import com.example.moduleGis.gnsstest.event.GnssConnectStatusEvent;
- import com.example.moduleGis.gnsstest.event.GnssServiceStatusEvent;
- import com.example.moduleGis.gnsstest.event.ReceiverConnectStatusEvent;
- import com.example.moduleGis.gnsstest.utils.BlueUtils;
- import com.example.moduleGis.gnsstest.utils.SdcardUtils;
- import com.huace.gnssserver.GnssToolApp;
- import com.huace.gnssserver.app.GnssServerEnvironment;
- import com.huace.gnssserver.app.ILog;
- import com.huace.gnssserver.gnss.data.GnssInfo;
- import com.huace.gnssserver.gnss.data.receiver.CorsInfo;
- import com.huace.gnssserver.gnss.data.receiver.ReceiverInfo;
- import com.huace.gnssserver.gnss.data.receiver.WorkWay;
- import com.pop.android.net.security.StringUtil;
- import com.uzmap.pkg.uzcore.UZWebView;
- import com.uzmap.pkg.uzcore.uzmodule.ModuleResult;
- import com.uzmap.pkg.uzcore.uzmodule.UZModule;
- import com.uzmap.pkg.uzcore.uzmodule.UZModuleContext;
- import org.greenrobot.eventbus.EventBus;
- import org.greenrobot.eventbus.Subscribe;
- import org.greenrobot.eventbus.ThreadMode;
- import org.json.JSONArray;
- import org.json.JSONException;
- import org.json.JSONObject;
- import java.text.SimpleDateFormat;
- 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>
- * <strong>Js Example:</strong><br>
- * var module = api.require('moduleDemo');<br>
- * module.xxx();
- * @author APICloud
- *
- */
- public class APIModuleGis extends UZModule {
- private static final String TAG = "APIModuleGis";
- static final int ACTIVITY_REQUEST_CODE_A = 100;
- private AlertDialog.Builder mAlert;
- private Vibrator mVibrator;
- private UZModuleContext mJsCallback;
- private MyTextView mMyTextView;
- private volatile String wgslng = "0.0";
- private volatile String wgslat = "0.0";
- private volatile String wgsblh = "0.0";
- private volatile String postType = "";
- public APIModuleGis(UZWebView webView) {
- super(webView);
- }
- public volatile static String bindCode = "";//绑定状态:0 绑定成功 1 绑定失败
- private volatile static String connectCode = "";//连接状态:0连接成功 1:连接失败
- 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表示失败
- String msg = "";//状态信息
- JSONObject res = new JSONObject();
- try {
- res.put("code",code);
- res.put("msg",msg);
- res.put("version","1.1.0");
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter == null) {
- res.put("code","2");
- res.put("msg","本机没有找到蓝牙硬件或驱动!");
- return new ModuleResult(res);
- } 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位置访问权限,以便应用可检测外围设备");
- return new ModuleResult(res);
- }
- //TODO 连接相关判断
- String rtkName = context.optString("rtkName");
- // if(rtkName==null||"".equals(rtkName)){
- // res.put("code","4");
- // res.put("msg","配对设备参数不存在");
- // return new ModuleResult(res);
- // }
- //打开蓝牙
- if (!BlueUtils.isOpen()) {
- //Util.showOnUiThreadToast(this, "请打开蓝牙进行手机蓝牙配对!");
- // errorPromote(this, "温馨提示", "请在设置页面打开手机蓝牙配对连接!");
- res.put("code","5");
- res.put("msg","请在设置页面打开手机蓝牙配对连接!");
- return new ModuleResult(res);
- }
- 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蓝牙设备!");
- return new ModuleResult(res);
- }
- if(!arrBle.contains(rtkName)){
- res.put("code","7");
- res.put("msg","您选择的设备"+rtkName+"未配对,请重新选择或在手机蓝牙设置页重新配对");
- return new ModuleResult(res);
- }
- 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 熔断
- if(!"0".equals(bindCode)){
- initGnss();
- if (!EventBus.getDefault().isRegistered(this)) {
- EventBus.getDefault().register(this);
- }
- onBindClick();
- res.put("code","8");
- res.put("msg","服务已断开,正在重启,请稍后");
- return new ModuleResult(res);
- }
- if(!"0".equals(connectCode)) {
- ReceiverConnectProxy.getInstance().connByBluetooth(rtkName);
- res.put("code","9");
- res.put("msg","连接已断开,正在重启,请稍后");
- return new ModuleResult(res);
- }
- if(!"0".equals(logCorsCod)) {
- DiffConnectManager.loginCors(this.context(), ip, port, mountName, userName, 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";
- res = startSendMessage(context);
- }
- }else{
- //TODO 说明RTK 没传, 就断开连接
- ReceiverConnectProxy.getInstance().disConnect();
- DiffConnectManager.loginOutCors(this.context());
- connectCode = "1";
- logCorsCod = "1";
- res.put("code","4");
- res.put("msg","配对设备参数不存在");
- }
- //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){
- Log.i(TAG,ex.getLocalizedMessage());
- }
- return new ModuleResult(res);
- }
- private static final int REQUEST_PERMISSION = 0X01;
- private final static String[] PERMISSIONS = new String[]{
- Manifest.permission.ACCESS_COARSE_LOCATION,
- Manifest.permission.ACCESS_FINE_LOCATION,
- // Manifest.permission.READ_PHONE_STATE,
- Manifest.permission.READ_EXTERNAL_STORAGE,
- Manifest.permission.WRITE_EXTERNAL_STORAGE
- };
- public void initGnss(){
- initGnssServer();
- GnssToolApp.getInstance().init(SdcardUtils.getAppFolder());
- }
- private void initGnssServer() {
- GnssToolApp.getInstance().initContext(this.context());
- GnssToolApp.getInstance().setLocalBroadcast(true);
- }
- //TODO Lx 开启GisActivity
- public ModuleResult jsmethod_startGisActivity_sync(UZModuleContext moduleContext){
- if (checkPermissionEnable(PERMISSIONS)) {
- // Intent intent = new Intent(context(), GisActivity.class);
- // intent.putExtra("appParam", moduleContext.optString("appParam"));
- // startActivity(intent);
- } else {
- ActivityCompat.requestPermissions(this.activity(), PERMISSIONS, REQUEST_PERMISSION);
- }
- return new ModuleResult();
- }
- private boolean checkPermissionEnable(String[] permissions) {
- boolean isOk = true;
- for (String permission : permissions) {
- if (ActivityCompat.checkSelfPermission(this.context(), permission) == PackageManager.PERMISSION_DENIED) {
- isOk = false;
- break;
- }
- }
- return isOk;
- }
- //TODO Lx 人工触发初始化并绑定GISService
- public ModuleResult jsmethod_startGisService_sync(UZModuleContext moduleContext){
- JSONObject res = new JSONObject();
- String code = "1";
- String msg = "error";
- try{
- res.put("code",code);
- res.put("msg",msg);
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter == null) {
- res.put("code","2");
- res.put("msg","本机没有找到蓝牙硬件或驱动!");
- return new ModuleResult(res);
- } 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位置访问权限,以便应用可检测外围设备");
- }
- if (checkPermissionEnable(PERMISSIONS)) {
- initGnss();
- if (!EventBus.getDefault().isRegistered(this)) {
- EventBus.getDefault().register(this);
- }
- onBindClick();
- //TODO 做连接状态字段bindCode的监听
- long time = System.currentTimeMillis();
- while (true){
- if (System.currentTimeMillis() - time < 1 * 1000) {//设置时间不超1秒
- //1秒内这个变量有变动,执行返回
- if(!"".equals(bindCode)) {
- if (bindCode.equals("0")) {
- code = "0";
- msg = "success";
- res.put("code", code);
- res.put("msg", msg);
- }
- return new ModuleResult(res);
- }
- } else {
- //TODO 说明超时
- msg = "绑定超时";
- res.put("msg",msg);
- break;
- }
- }
- } else {
- ActivityCompat.requestPermissions(this.activity(), PERMISSIONS, REQUEST_PERMISSION);
- }
- 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);
- }
- }
- public ModuleResult jsmethod_huaceRtkList_sync(UZModuleContext moduleContext){
- String code = "1";//0表示成功,1表示失败
- String msg = "error";//状态信息
- JSONObject res = new JSONObject();
- try{
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter == null) {
- res.put("code","2");
- res.put("msg","本机没有找到蓝牙硬件或驱动!");
- return new ModuleResult(res);
- } 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位置访问权限,以便应用可检测外围设备");
- }
- // if (Build.VERSION.SDK_INT >= 28) {
- // //判断是否有管理外部存储的权限
- // //TODO 跳转到权限页,请求权限
- // Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
- // intent.setData(Uri.fromParts("package", moduleContext.getContext().getPackageName(), null));
- // moduleContext.getContext().startActivity(intent);
- // }
- if (checkPermissionEnable(PERMISSIONS)) {
- //打开蓝牙
- if (!BlueUtils.isOpen()) {
- //Util.showOnUiThreadToast(this, "请打开蓝牙进行手机蓝牙配对!");
- // errorPromote(this, "温馨提示", "请在设置页面打开手机蓝牙配对连接!");
- res.put("code","4");
- res.put("msg","请在设置页面打开手机蓝牙配对连接!");
- return new ModuleResult(res);
- }
- 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","5");
- res.put("msg","没有已配对连接的RTK蓝牙设备!");
- return new ModuleResult(res);
- }
- res.put("code","0");
- res.put("msg","success");
- JSONArray jsonArray = new JSONArray();
- for (String rtkName:arrBle) {
- jsonArray.put(rtkName);
- }
- res.put("data",jsonArray);
- }else{
- res.put("code","6");
- res.put("msg","权限不足,请允许相关权限");
- ActivityCompat.requestPermissions(this.activity(), PERMISSIONS, REQUEST_PERMISSION);
- }
- 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);
- }
- }
- public ModuleResult jsmethod_sendConnect_sync(UZModuleContext moduleContext){
- String code = "1";//0表示成功,1表示失败
- String msg = "danger";//状态信息
- JSONObject res = new JSONObject();
- try {
- res.put("code",code);
- res.put("msg",msg);
- res.put("version","1.0.6");
- String rtkName = moduleContext.optString("rtkName");
- if(rtkName==null||"".equals(rtkName)){
- res.put("code","2");
- res.put("msg","配对设备参数不存在");
- return new ModuleResult(res);
- }
- //打开蓝牙
- if (!BlueUtils.isOpen()) {
- //Util.showOnUiThreadToast(this, "请打开蓝牙进行手机蓝牙配对!");
- // errorPromote(this, "温馨提示", "请在设置页面打开手机蓝牙配对连接!");
- res.put("code","3");
- res.put("msg","请在设置页面打开手机蓝牙配对连接!");
- return new ModuleResult(res);
- }
- 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","4");
- res.put("msg","没有已配对连接的RTK蓝牙设备!");
- return new ModuleResult(res);
- }
- if(!arrBle.contains(rtkName)){
- res.put("code","5");
- res.put("msg","您选择的设备"+rtkName+"未配对,请重新选择或在手机蓝牙设置页重新配对");
- return new ModuleResult(res);
- }
- if (!EventBus.getDefault().isRegistered(this)) {
- EventBus.getDefault().register(this);
- }
- ReceiverConnectProxy.getInstance().connByBluetooth(rtkName);
- GnssServerEnvironment.getInstance().setLog(new ILog(){
- @Override
- public void printException(@NonNull Exception e) {
- }
- @Override
- public void d(@NonNull String s) {
- Log.d("huaceDemo",s);
- }
- @Override
- public void e(@NonNull String s) {
- Log.e("huaceDemo",s);
- }
- @Override
- public void i(@NonNull String s) {
- Log.i("huaceDemo",s);
- }
- });
- //TODO 做连接状态字段connectCode的监听
- // long time = System.currentTimeMillis();
- // while (true){
- // if (System.currentTimeMillis() - time < 10 * 1000) {//设置时间不超5秒
- //5秒内这个变量有变动,执行返回
- if(!"".equals(connectCode)) {
- if (connectCode.equals("0")) {
- code = "0";
- msg = "success";
- res.put("code", code);
- res.put("msg", msg);
- }
- return new ModuleResult(res);
- }
- // } else {
- // //TODO 说明超时
- // msg = "连接超时";
- // res.put("msg",msg);
- // break;
- // }
- // }
- 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);
- }
- }
- public ModuleResult jsmethod_loginCors_sync(final UZModuleContext context){
- String code = "1";//0表示成功;1 表示失败
- String msg = "error";
- JSONObject res = new JSONObject();
- try{
- res.put("code",code);
- res.put("msg",msg);
- 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");
- if(ip==null||"".equals(ip)||
- port==null||
- mountName==null||"".equals(mountName)||
- userName==null||"".equals(userName)||
- passWord==null||"".equals(passWord)){
- res.put("code","2");
- res.put("msg","传递参数不完整");
- return new ModuleResult(res);
- }
- if(!"0".equals(logCorsCod)){
- DiffConnectManager.loginCors(this.context(),ip,port,mountName,userName,passWord);
- }else{
- code = "0";
- msg = "success";
- }
- res.put("code",code);
- res.put("msg",msg);
- 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 当前连接的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);
- res = startSendMessage(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 JSONObject startSendMessage(UZModuleContext moduleContext) throws JSONException {
- JSONObject res = new JSONObject();
- BluetoothAdapter adapter = BluetoothAdapter.getDefaultAdapter();
- if (adapter == null) {
- res.put("code","2");
- res.put("msg","本机没有找到蓝牙硬件或驱动!");
- return res;
- } 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位置访问权限,以便应用可检测外围设备");
- return res;
- }
- //TODO 连接相关判断
- String rtkName = moduleContext.optString("rtkName");
- if(rtkName==null||"".equals(rtkName)){
- res.put("code","4");
- res.put("msg","配对设备参数不存在");
- return res;
- }
- //打开蓝牙
- if (!BlueUtils.isOpen()) {
- //Util.showOnUiThreadToast(this, "请打开蓝牙进行手机蓝牙配对!");
- // errorPromote(this, "温馨提示", "请在设置页面打开手机蓝牙配对连接!");
- res.put("code","5");
- res.put("msg","请在设置页面打开手机蓝牙配对连接!");
- return res;
- }
- 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蓝牙设备!");
- return res;
- }
- if(!arrBle.contains(rtkName)){
- res.put("code","7");
- res.put("msg","您选择的设备"+rtkName+"未配对,请重新选择或在手机蓝牙设置页重新配对");
- return res;
- }
- //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");
- return res;
- }else {
- ActivityCompat.requestPermissions(this.activity(), PERMISSIONS, REQUEST_PERMISSION);
- }
- return res;
- }
- //TODO Lx 销毁服务绑定
- public ModuleResult jsmethod_stopGisService_sync(final UZModuleContext context) {
- String code = "1";//0表示成功;1表示失败
- String msg = "";
- JSONObject res = new JSONObject();
- //解绑服务
- try {
- // GnssToolManager.getInstance().unBindService(this.context());
- onUnBindClick();
- code = "0";
- res.put("code",code);
- }catch (Exception e){
- Log.i(TAG,e.getLocalizedMessage());
- }
- return new ModuleResult(res);
- }
- //TODO Lx 断开Connect连接
- public ModuleResult jsmethod_stopBTConnect_sync(final UZModuleContext context) {
- String code = "1";//0表示成功;1表示失败
- String msg = "";
- JSONObject res = new JSONObject();
- //解绑服务
- try {
- // GnssToolManager.getInstance().unBindService(this.context());
- ReceiverConnectProxy.getInstance().disConnect();
- //TODO 无异常
- connectCode = "1";
- code = "0";
- res.put("code",code);
- }catch (Exception e){
- Log.i(TAG,e.getLocalizedMessage());
- }
- return new ModuleResult(res);
- }
- //TODO Lx 断开Cors连接
- public ModuleResult jsmethod_stopGorsConnect_sync(final UZModuleContext context) {
- String code = "1";//0表示成功;1表示失败
- String msg = "";
- JSONObject res = new JSONObject();
- //解绑服务
- try {
- // GnssToolManager.getInstance().unBindService(this.context());
- DiffConnectManager.loginOutCors(this.context());
- //TODO 无异常
- logCorsCod = "1";
- code = "0";
- res.put("code",code);
- }catch (Exception e){
- Log.i(TAG,e.getLocalizedMessage());
- }
- return new ModuleResult(res);
- }
- private void onBindClick() {
- GnssServiceManager.getInstance().bindService(this.context());
- }
- /***
- * 解绑GnssServer服务
- */
- private void onUnBindClick() {
- GnssServiceManager.getInstance().unBindService(this.context());
- }
- @Subscribe(threadMode = ThreadMode.MAIN,sticky =true)
- public void onEventMainThread(GnssServiceStatusEvent event) {
- switch (event.getGnssServiceStatus()) {
- case GnssServiceStatusEvent.SERVICE_BIND_SUCCEED:
- Log.i(TAG,"已绑定");
- bindCode = "0";
- break;
- case GnssServiceStatusEvent.SERVICE_UNBIND:
- Log.i(TAG,"未绑定");
- bindCode = "1";
- break;
- default:
- }
- }
- SimpleDateFormat format = new SimpleDateFormat("MM-dd-HH-mm-ss", Locale.getDefault());
- /***
- * 把收到的Gnss数据展示到页面上
- *
- * @param gnssinfo gnssinfo
- */
- @Subscribe(threadMode = ThreadMode.MAIN,sticky =true)
- public void onEventMainThread(GnssInfo gnssinfo) {
- connectCode = "0";
- Log.i(TAG,String.valueOf(gnssinfo.latitude));
- Log.i(TAG,String.valueOf(gnssinfo.longitude));
- Log.i(TAG,String.valueOf(gnssinfo.altitude));
- Log.i(TAG,"" + gnssinfo.staUseCount + "/" + gnssinfo.staCount);
- postType = String.valueOf(gnssinfo.posType);
- Log.i(TAG,String.valueOf(gnssinfo.posType));
- if (gnssinfo.posType!=6) {
- if("0".equals(logCorsCod)){
- if(gnssinfo.posType!=4) {
- wgslat = String.valueOf(gnssinfo.latitude);
- wgslng = String.valueOf(gnssinfo.longitude);
- wgsblh = String.valueOf(gnssinfo.altitude);
- }
- }else {
- wgslat = String.valueOf(gnssinfo.latitude);
- wgslng = String.valueOf(gnssinfo.longitude);
- wgsblh = String.valueOf(gnssinfo.altitude);
- }
- }
- if (gnssinfo.time != null && !gnssinfo.time.isEmpty()) {
- //format在使用之前必须加TimeZone.getDefault();
- long longtime = TimeZone.getDefault().getRawOffset() + Long.parseLong(gnssinfo.time);
- format.setTimeZone(TimeZone.getDefault());
- String time = format.format(new Date(longtime));
- Log.i(TAG,time);
- }
- }
- @Subscribe(threadMode = ThreadMode.MAIN,sticky =true)
- public void onEventMainThread(ReceiverConnectStatusEvent event) {
- Log.i(TAG,event.getStatus().name());
- }
- @Subscribe(threadMode = ThreadMode.MAIN,sticky =true)
- public void onEventMainThread(GnssConnectStatusEvent event) {
- switch (event.getGnssConnectStatus()) {
- case GnssConnectStatusEvent.RECEIVER_DISCONNECT_CORS_DISCONNECT:
- connectCode = "1";
- logCorsCod = "1";
- Log.i(TAG,"已断开");
- break;
- case GnssConnectStatusEvent.RECEIVER_CONNECT_CORS_DISCONNECT:
- connectCode = "0";
- Log.i(TAG,"已连接");
- break;
- case GnssConnectStatusEvent.RECEIVER_CONNECT_CORS_CONNECT:
- logCorsCod = "0";
- Log.i(TAG,"已登录");
- // if (progressDialog != null && progressDialog.isShowing()) {
- // progressDialog.dismiss();
- // progressDialog = null;
- // Toast.makeText(MainActivity.this, "登录Cors成功!", Toast.LENGTH_LONG).show();
- // }
- break;
- case GnssConnectStatusEvent.ERROR_TEN_SECOND_NO_DATA:
- default:
- break;
- }
- }
- @Subscribe(threadMode = ThreadMode.MAIN,sticky =true)
- public void onEventMainThread(WorkWay way) {
- Log.i(TAG,way.enumWorkWay.name());
- }
- @Subscribe(threadMode = ThreadMode.MAIN,sticky =true)
- public void onEventMainThread(ReceiverInfo info) {
- Log.i(TAG,info.getSn());
- }
- /**
- * TODO 此处以下为demo代码 无意义
- */
- /**
- * <strong>函数</strong><br><br>
- * 该函数映射至Javascript中moduleDemo对象的showAlert函数<br><br>
- * <strong>JS Example:</strong><br>
- * moduleDemo.showAlert(argument);
- *
- * @param moduleContext (Required)
- */
- public void jsmethod_showAlert(final UZModuleContext moduleContext){
- if(null != mAlert){
- return;
- }
- String showMsg = moduleContext.optString("msg");
- mAlert = new AlertDialog.Builder(context());
- mAlert.setTitle("这是标题");
- mAlert.setMessage(showMsg);
- mAlert.setCancelable(false);
- mAlert.setPositiveButton("确定", new OnClickListener() {
- @Override
- public void onClick(DialogInterface dialog, int which) {
- dialog.dismiss();
- mAlert = null;
- JSONObject ret = new JSONObject();
- try {
- ret.put("buttonIndex", 1);
- } catch (JSONException e) {
- e.printStackTrace();
- }
- moduleContext.success(ret, true);
- }
- });
- mAlert.show();
- }
- /**
- * <strong>函数</strong><br><br>
- * 该函数映射至Javascript中moduleDemo对象的startActivity函数<br><br>
- * <strong>JS Example:</strong><br>
- * moduleDemo.startActivity(argument);
- *
- * @param moduleContext (Required)
- */
- public void jsmethod_startActivity(UZModuleContext moduleContext){
- // Intent intent = new Intent(context(), DemoActivity.class);
- // intent.putExtra("appParam", moduleContext.optString("appParam"));
- // startActivity(intent);
- }
- /**
- * <strong>函数</strong><br><br>
- * 该函数映射至Javascript中moduleDemo对象的startActivityForResult函数<br><br>
- * <strong>JS Example:</strong><br>
- * moduleDemo.startActivityForResult(argument);
- *
- * @param moduleContext (Required)
- */
- public void jsmethod_startActivityForResult(UZModuleContext moduleContext){
- mJsCallback = moduleContext;
- // Intent intent = new Intent(context(), DemoActivity.class);
- // intent.putExtra("appParam", moduleContext.optString("appParam"));
- // intent.putExtra("needResult", true);
- // startActivityForResult(intent, ACTIVITY_REQUEST_CODE_A);
- }
- /**
- * <strong>函数</strong><br><br>
- * 该函数映射至Javascript中moduleDemo对象的vibrate函数<br><br>
- * <strong>JS Example:</strong><br>
- * moduleDemo.vibrate(argument);
- *
- * @param moduleContext (Required)
- */
- public void jsmethod_vibrate(UZModuleContext moduleContext){
- try {
- if (null == mVibrator) {
- mVibrator = (Vibrator) context().getSystemService(Context.VIBRATOR_SERVICE);
- }
- mVibrator.vibrate(moduleContext.optLong("milliseconds"));
- } catch (SecurityException e) {
- Toast.makeText(context(), "no vibrate permisson declare", Toast.LENGTH_SHORT).show();
- }
- }
- /**
- * <strong>函数</strong><br><br>
- * 该函数映射至Javascript中moduleDemo对象的stopVibrate函数<br><br>
- * <strong>JS Example:</strong><br>
- * moduleDemo.stopVibrate(argument);
- *
- * @param moduleContext (Required)
- */
- public void jsmethod_stopVibrate(UZModuleContext moduleContext){
- if (null != mVibrator) {
- try {
- mVibrator.cancel();
- mVibrator = null;
- } catch (SecurityException e) {
- e.printStackTrace();
- }
- }
- }
- /**
- * <strong>函数</strong><br><br>
- * 该函数映射至Javascript中moduleDemo对象的addView函数<br><br>
- * <strong>JS Example:</strong><br>
- * moduleDemo.addView(argument);
- *
- * @param moduleContext (Required)
- */
- public void jsmethod_addView(UZModuleContext moduleContext){
- int x = moduleContext.optInt("x");
- int y = moduleContext.optInt("y");
- int w = moduleContext.optInt("w");
- int h = moduleContext.optInt("h");
- if(w == 0){
- w = ViewGroup.LayoutParams.MATCH_PARENT;
- }
- if(h == 0){
- h = ViewGroup.LayoutParams.MATCH_PARENT;
- }
- if(null == mMyTextView){
- mMyTextView = new MyTextView(context());
- }
- int FROM_TYPE = Animation.RELATIVE_TO_PARENT;
- Animation anim = new TranslateAnimation(FROM_TYPE, 1.0f, FROM_TYPE, 0.0f, FROM_TYPE, 0.0f, FROM_TYPE, 0.0f);
- anim.setDuration(500);
- mMyTextView.setAnimation(anim);
- RelativeLayout.LayoutParams rlp = new RelativeLayout.LayoutParams(w, h);
- rlp.leftMargin = x;
- rlp.topMargin = y;
- insertViewToCurWindow(mMyTextView, rlp);
- }
- /**
- * <strong>函数</strong><br><br>
- * 该函数映射至Javascript中moduleDemo对象的removeView函数<br><br>
- * <strong>JS Example:</strong><br>
- * moduleDemo.removeView(argument);
- *
- * @param moduleContext (Required)
- */
- public void jsmethod_removeView(UZModuleContext moduleContext){
- if(null != mMyTextView){
- removeViewFromCurWindow(mMyTextView);
- }
- }
- @Override
- public void onActivityResult(int requestCode, int resultCode, Intent data) {
- if(resultCode == Activity.RESULT_OK && requestCode == ACTIVITY_REQUEST_CODE_A){
- String result = data.getStringExtra("result");
- if(null != result && null != mJsCallback){
- try {
- JSONObject ret = new JSONObject(result);
- mJsCallback.success(ret, true);
- mJsCallback = null;
- } catch (JSONException e) {
- e.printStackTrace();
- }
- }
- }
- }
- @Override
- protected void onClean() {
- if(null != mAlert){
- mAlert = null;
- }
- if(null != mJsCallback){
- mJsCallback = null;
- }
- }
- class MyTextView extends TextView{
- public MyTextView(Context context) {
- super(context);
- setBackgroundColor(0xFFF0CFD0);
- setText("我是自定义View");
- setTextColor(0xFF000000);
- setGravity(Gravity.CENTER);
- }
- }
- }
|