update 1230
authorsnickersun <scy@incartech.cn>
Mon, 30 Dec 2019 12:40:09 +0000 (20:40 +0800)
committersnickersun <scy@incartech.cn>
Mon, 30 Dec 2019 12:40:09 +0000 (20:40 +0800)
.idea/libraries/Gradle____local_jars___D__workspace_icsupport_app_libs_IAtChannel_classes_jar_unspecified_jar.xml [new file with mode: 0644]
.idea/libraries/Gradle____local_jars___D__workspace_icsupport_app_libs_framework_jar_unspecified_jar.xml [new file with mode: 0644]
app/src/main/java/com/ic/protocol/MainActivity.java
app/src/main/java/com/ic/protocol/adapter/LBSHelper.java [new file with mode: 0644]
app/src/main/java/com/ic/protocol/adapter/protocolAPIHelper.java
app/src/main/java/com/ic/protocol/bean/ICLocation.java [new file with mode: 0644]
app/src/main/java/com/ic/protocol/bean/deviceStatus.java
app/src/main/java/com/ic/protocol/bean/location.java [deleted file]
app/src/main/java/com/ic/protocol/service/protocolMainServer.java
app/src/main/java/com/ic/protocol/utils/ICLog.java

diff --git a/.idea/libraries/Gradle____local_jars___D__workspace_icsupport_app_libs_IAtChannel_classes_jar_unspecified_jar.xml b/.idea/libraries/Gradle____local_jars___D__workspace_icsupport_app_libs_IAtChannel_classes_jar_unspecified_jar.xml
new file mode 100644 (file)
index 0000000..9801cf8
--- /dev/null
@@ -0,0 +1,9 @@
+<component name="libraryTable">\r
+  <library name="Gradle: __local_jars__:D.\workspace\icsupport\app\libs\IAtChannel_classes.jar:unspecified@jar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/libs/IAtChannel_classes.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC />\r
+    <SOURCES />\r
+  </library>\r
+</component>
\ No newline at end of file
diff --git a/.idea/libraries/Gradle____local_jars___D__workspace_icsupport_app_libs_framework_jar_unspecified_jar.xml b/.idea/libraries/Gradle____local_jars___D__workspace_icsupport_app_libs_framework_jar_unspecified_jar.xml
new file mode 100644 (file)
index 0000000..bd2db02
--- /dev/null
@@ -0,0 +1,9 @@
+<component name="libraryTable">\r
+  <library name="Gradle: __local_jars__:D.\workspace\icsupport\app\libs\framework.jar:unspecified@jar">\r
+    <CLASSES>\r
+      <root url="jar://$PROJECT_DIR$/app/libs/framework.jar!/" />\r
+    </CLASSES>\r
+    <JAVADOC />\r
+    <SOURCES />\r
+  </library>\r
+</component>
\ No newline at end of file
index ea9f7da..e351ab6 100644 (file)
@@ -8,6 +8,7 @@ import android.widget.Button;
 import android.widget.Toast;
 
 import com.ic.protocol.service.protocolMainServer;
+import com.ic.protocol.utils.ICLog;
 import com.ic.protocol.utils.RxSocket;
 
 import java.net.InetAddress;
@@ -61,13 +62,8 @@ public class MainActivity extends AppCompatActivity {
                     if(mProtocolMainServer !=null) mProtocolMainServer.sendMsg(new String("IWAP00867155030001063#"));
                     break;
                 case R.id.btnWrite2:
-                    String msg="IWAP00938495856921245#";
-                    String msg1="IWAP0093849566856921245#IWAP0";
-                    String msg2="IWAP00938495856921245#IWAP0093849585692fff5#";
-                    msg.split("#");
-                    msg1.split("#");
-                    msg2.split("#");
 
+                    if(mProtocolMainServer !=null) mProtocolMainServer.testGpsData();
 
                     break;
             }
diff --git a/app/src/main/java/com/ic/protocol/adapter/LBSHelper.java b/app/src/main/java/com/ic/protocol/adapter/LBSHelper.java
new file mode 100644 (file)
index 0000000..33b8d25
--- /dev/null
@@ -0,0 +1,394 @@
+package com.ic.protocol.adapter;\r
+\r
+import android.Manifest;\r
+import android.content.BroadcastReceiver;\r
+import android.content.Context;\r
+import android.content.Intent;\r
+import android.content.IntentFilter;\r
+import android.content.pm.PackageManager;\r
+import android.net.wifi.ScanResult;\r
+import android.net.wifi.WifiManager;\r
+import android.os.Build;\r
+import android.os.Handler;\r
+import android.os.Message;\r
+import android.os.SystemClock;\r
+import android.support.annotation.Nullable;\r
+import android.support.v4.app.ActivityCompat;\r
+import android.telephony.CellLocation;\r
+import android.telephony.NeighboringCellInfo;\r
+import android.telephony.PhoneStateListener;\r
+import android.telephony.SignalStrength;\r
+import android.telephony.TelephonyManager;\r
+import android.telephony.cdma.CdmaCellLocation;\r
+import android.telephony.gsm.GsmCellLocation;\r
+\r
+import com.ic.protocol.bean.deviceStatus;\r
+import com.ic.protocol.utils.ICLog;\r
+\r
+import java.util.Collections;\r
+import java.util.Comparator;\r
+import java.util.Iterator;\r
+import java.util.List;\r
+import java.util.Timer;\r
+import java.util.TimerTask;\r
+\r
+import static android.net.wifi.WifiManager.WIFI_STATE_DISABLED;\r
+import static android.net.wifi.WifiManager.WIFI_STATE_DISABLING;\r
+import static android.net.wifi.WifiManager.WIFI_STATE_ENABLED;\r
+import static android.net.wifi.WifiManager.WIFI_STATE_ENABLING;\r
+import static android.net.wifi.WifiManager.WIFI_STATE_UNKNOWN;\r
+import static android.telephony.PhoneStateListener.LISTEN_SIGNAL_STRENGTHS;\r
+import static android.telephony.TelephonyManager.NETWORK_TYPE_LTE;\r
+\r
+public class LBSHelper {\r
+    private boolean IS_HASOPEN = false;\r
+    private boolean IS_OPEN = false;\r
+    private Context context;\r
+    Handler mHandler;\r
+    private int mLastSignal;\r
+    private LBSHelper.OnWiFiInfoListener mListener;\r
+    private LBSHelper.MyPhoneStateListener mMyListener;\r
+    int mNetworkType;\r
+    private Timer mTimer;\r
+    public deviceStatus runtime;\r
+    private BroadcastReceiver wifiChangedReceiver;\r
+    private String wifiInfoResult;\r
+    private WifiManager wifiManager;\r
+\r
+\r
+    public LBSHelper(Context _context, WifiManager _wifiManager, deviceStatus dev) {\r
+        this.wifiManager = _wifiManager;\r
+        this.context = _context;\r
+        this.runtime = dev;\r
+        initHelper();\r
+        registerBroadReceiver();\r
+        this.mMyListener = new LBSHelper.MyPhoneStateListener();\r
+        TelephonyManager tm = ((TelephonyManager) LBSHelper.this.context.getSystemService(Context.TELEPHONY_SERVICE));\r
+        tm.listen(this.mMyListener, LISTEN_SIGNAL_STRENGTHS);\r
+        this.mNetworkType = tm.getNetworkType();\r
+    }\r
+\r
+    private void initHelper() {\r
+        this.mHandler = new Handler() {\r
+            @Override\r
+            public void handleMessage(Message msg) {\r
+                super.handleMessage(msg);\r
+                if (msg.what == 104) {\r
+                    LBSHelper.this.wifiManager.setWifiEnabled(false);\r
+                    if (LBSHelper.this.mListener != null) {\r
+                        LBSHelper.this.mListener.getWifiInfoCallBack((String) null);\r
+                    }\r
+\r
+                    LBSHelper.this.mTimer = null;\r
+                }\r
+            }\r
+        };\r
+        this.wifiChangedReceiver = new BroadcastReceiver() {\r
+            @Override\r
+            public void onReceive(Context context, Intent intent) {\r
+\r
+//                WIFI_STATE_DISABLING = 0\r
+//                WIFI_STATE_DISABLED = 1\r
+//                WIFI_STATE_ENABLING = 2\r
+//                WIFI_STATE_ENABLED = 3\r
+//                WIFI_STATE_UNKNOWN = 4\r
+                switch (intent.getIntExtra("wifi_state", 0)) {\r
+                    case WIFI_STATE_ENABLED:\r
+                        LBSHelper.this.wifiManager.startScan();\r
+                        if (LBSHelper.this.mListener == null) {\r
+                            LBSHelper.this.mMyListener = new MyPhoneStateListener();\r
+                        }\r
+\r
+                        if (LBSHelper.this.IS_OPEN) {\r
+                            (new Thread(new Runnable() {\r
+                                public void run() {\r
+                                    SystemClock.sleep(3000L);\r
+                                    StringBuilder sb = LBSHelper.this.handScanResults();\r
+                                    if (sb == null) {\r
+                                        LBSHelper.this.wifiInfoResult = null;\r
+                                    } else {\r
+                                        LBSHelper.this.wifiInfoResult = sb.toString();\r
+                                    }\r
+\r
+                                    LBSHelper.this.mListener.getWifiInfoCallBack(LBSHelper.this.wifiInfoResult);\r
+                                    LBSHelper.this.wifiManager.setWifiEnabled(false);\r
+                                    LBSHelper.this.IS_OPEN = false;\r
+                                    LBSHelper.this.IS_HASOPEN = false;\r
+                                    if (LBSHelper.this.mTimer != null) {\r
+                                        LBSHelper.this.mTimer.cancel();\r
+                                        LBSHelper.this.mTimer.purge();\r
+                                        LBSHelper.this.mTimer = null;\r
+                                    }\r
+\r
+                                }\r
+                            })).start();\r
+                            return;\r
+                        } else if (LBSHelper.this.IS_HASOPEN) {\r
+                            if (LBSHelper.this.wifiManager == null) {\r
+                                if (LBSHelper.this.mListener != null) {\r
+                                    LBSHelper.this.mListener.getWifiInfoCallBack((String) null);\r
+                                }\r
+\r
+                                return;\r
+                            }\r
+\r
+                            (new Thread(new Runnable() {\r
+                                public void run() {\r
+                                    SystemClock.sleep(3000L);\r
+                                    StringBuilder sb = LBSHelper.this.handScanResults();\r
+                                    if (sb == null) {\r
+                                        LBSHelper.this.wifiInfoResult = null;\r
+                                    } else {\r
+                                        LBSHelper.this.wifiInfoResult = sb.toString();\r
+                                    }\r
+\r
+                                    LBSHelper.this.mListener.getWifiInfoCallBack(LBSHelper.this.wifiInfoResult);\r
+                                    LBSHelper.this.IS_OPEN = false;\r
+                                    LBSHelper.this.IS_HASOPEN = false;\r
+                                }\r
+                            })).start();\r
+                            return;\r
+                        } else if (LBSHelper.this.mListener != null) {\r
+                            LBSHelper.this.mListener.getWifiInfoCallBack((String) null);\r
+                        }\r
+                    case WIFI_STATE_DISABLING:\r
+                    case WIFI_STATE_DISABLED:\r
+                    case WIFI_STATE_ENABLING:\r
+                    case WIFI_STATE_UNKNOWN:\r
+                        return;\r
+                    default:\r
+                }\r
+            }\r
+        };\r
+\r
+\r
+    }\r
+\r
+    @Nullable\r
+    private StringBuilder handScanResults() {\r
+        List var4 = this.wifiManager.getScanResults();\r
+        if (var4.size() < 2) {\r
+            return null;\r
+        } else {\r
+            this.sortByLevel(var4);\r
+            StringBuilder var3 = new StringBuilder();\r
+            Iterator var6 = var4.iterator();\r
+            int var1 = 0;\r
+\r
+            while (var6.hasNext()) {\r
+                ScanResult var5 = (ScanResult) var6.next();\r
+                if (var5.level != 0) {\r
+                    var3.append("+");\r
+                    var3.append(var5.BSSID);\r
+                    var3.append("@");\r
+                    var3.append(var5.level);\r
+                    int var2 = var1 + 1;\r
+                    var1 = var2;\r
+                    if (var2 == 6) {\r
+                        break;\r
+                    }\r
+                }\r
+            }\r
+\r
+            var3.deleteCharAt(0);\r
+            return var3;\r
+        }\r
+    }\r
+\r
+    private void sortByLevel(List<ScanResult> var1) {\r
+        Collections.sort(var1, new Comparator<ScanResult>() {\r
+            public int compare(ScanResult var1, ScanResult var2) {\r
+                return var2.level - var1.level;\r
+            }\r
+        });\r
+    }\r
+\r
+    public void sendBroadcast(){\r
+        Intent intent = new Intent("android.net.wifi.WIFI_STATE_CHANGED");\r
+        intent.putExtra("wifi_state",3);\r
+        this.context.sendBroadcast(intent);\r
+\r
+    }\r
+    private void startTimer() {\r
+        if (this.mTimer == null) {\r
+            this.mTimer = new Timer();\r
+        }\r
+\r
+        this.mTimer.schedule(new TimerTask() {\r
+            @Override\r
+            public void run() {\r
+                LBSHelper.this.mHandler.sendEmptyMessage(104);\r
+            }\r
+        }, 10000L);\r
+    }\r
+\r
+    private void unRegisterBroadReceiver() {\r
+        this.context.unregisterReceiver(this.wifiChangedReceiver);\r
+    }\r
+\r
+    public String getAttchCellInfo(TelephonyManager tm) {\r
+        return this.getCellInfo(tm);\r
+    }\r
+\r
+    public String getCellInfo(TelephonyManager telephonyManager) {\r
+        int var3 = Build.VERSION.SDK_INT;\r
+        int var2 = 0;\r
+        String var4;\r
+        if (var3 > 23) {\r
+            var4 = telephonyManager.getSimOperator();\r
+            if (var4 == null) {\r
+                ICLog.i("operator == null");\r
+                return null;\r
+            }\r
+\r
+            var4 = var4.substring(0, 5);\r
+        } else {\r
+            var4 = telephonyManager.getNetworkOperator();\r
+        }\r
+\r
+        if (var4 != null && var4.length() > 3) {\r
+            if (ActivityCompat.checkSelfPermission(this.context, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this.context, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {\r
+                // TODO: Consider calling\r
+                //    ActivityCompat#requestPermissions\r
+                // here to request the missing permissions, and then overriding\r
+                //   public void onRequestPermissionsResult(int requestCode, String[] permissions,\r
+                //                                          int[] grantResults)\r
+                // to handle the case where the user grants the permission. See the documentation\r
+                // for ActivityCompat#requestPermissions for more details.\r
+                return "Failed Check permission for getCellLocation";\r
+            }\r
+            CellLocation celllocation = telephonyManager.getCellLocation();\r
+            if (celllocation == null) {\r
+                ICLog.i("cellLocation = null");\r
+                return null;\r
+            } else {\r
+                StringBuilder gsmSb = new StringBuilder(var4);\r
+                StringBuilder mccmnc = new StringBuilder(var4);\r
+                StringBuilder cdmaSB = new StringBuilder();\r
+                gsmSb.insert(3, "@");\r
+                mccmnc.insert(3, "@");\r
+                this.runtime.setMccAndMnc(mccmnc.toString());\r
+                if (celllocation instanceof GsmCellLocation) {\r
+                    GsmCellLocation gsmCell = (GsmCellLocation)celllocation;\r
+                    gsmSb.append("@");\r
+                    gsmSb.append(gsmCell.getLac());\r
+                    gsmSb.append("@");\r
+                    gsmSb.append(gsmCell.getCid());\r
+                    gsmSb.append("@");\r
+                    gsmSb.append(this.mLastSignal);\r
+                    this.runtime.setCdmaInfo(gsmSb.toString());\r
+                    ICLog.i("GsmCellLocation "+ gsmSb.toString());\r
+                } else if (celllocation instanceof CdmaCellLocation) {\r
+                    CdmaCellLocation cdmaCelllocation = (CdmaCellLocation)celllocation;\r
+                    cdmaSB.append(cdmaCelllocation.getSystemId());\r
+                    cdmaSB.append(",");\r
+                    cdmaSB.append(cdmaCelllocation.getNetworkId());\r
+                    cdmaSB.append(",");\r
+                    cdmaSB.append(cdmaCelllocation.getBaseStationId());\r
+                    cdmaSB.append(",");\r
+                    cdmaSB.append("");\r
+                    cdmaSB.append(",");\r
+                    cdmaSB.append("");\r
+                    cdmaSB.append(",");\r
+                    cdmaSB.append(this.mLastSignal);\r
+                    this.runtime.setCdmaInfo(cdmaSB.toString());\r
+                    ICLog.i("CdmaCellLocation");\r
+                    Context var16 = this.context;\r
+                    StringBuilder var8 = new StringBuilder();\r
+                    var8.append("CDMA_info=");\r
+                    var8.append(cdmaSB.toString());\r
+                    ICLog.i(var8.toString());\r
+//                    FileOutputUtil.fileOutput(var16, "onCellLocationChanged", var8.toString());\r
+                } else {\r
+                    this.runtime.setCdmaInfo((String)null);\r
+                }\r
+\r
+                this.runtime.setCurrentCellInfo(gsmSb.toString());\r
+\r
+                cdmaSB = new StringBuilder();\r
+                cdmaSB.append("lbsInfo CurrentCellInfo== ");\r
+                cdmaSB.append(this.runtime.getCurrentCellInfo());\r
+                ICLog.i(cdmaSB.toString());\r
+\r
+                Context var13 = this.context;\r
+                StringBuilder var17 = new StringBuilder();\r
+                var17.append("lbsInfo currentCellInfo== ");\r
+                var17.append(this.runtime.getCurrentCellInfo());\r
+//                FileOutputUtil.fileOutput(var13, "cellInfoTest", var17.toString());\r
+                ICLog.i("cellInfoTest "+ var17.toString());\r
+                List neighboringCell_list = telephonyManager.getNeighboringCellInfo();\r
+                if (neighboringCell_list != null && !neighboringCell_list.isEmpty()) {\r
+                    Iterator cell = neighboringCell_list.iterator();\r
+\r
+                    while(cell.hasNext()) {\r
+                        NeighboringCellInfo mNeighboringCellInfo = (NeighboringCellInfo)cell.next();\r
+                        if (mNeighboringCellInfo.getLac() == -1) {\r
+                            break;\r
+                        }\r
+\r
+                        gsmSb.append("+");\r
+                        gsmSb.append(mccmnc);\r
+                        gsmSb.append("@");\r
+                        gsmSb.append(mNeighboringCellInfo.getLac());\r
+                        gsmSb.append("@");\r
+                        gsmSb.append(mNeighboringCellInfo.getCid());\r
+                        gsmSb.append("@");\r
+                        gsmSb.append(mNeighboringCellInfo.getRssi() + 110);\r
+                        var3 = var2 + 1;\r
+                        var2 = var3;\r
+                        if (var3 == 5) {\r
+                            break;\r
+                        }\r
+                    }\r
+                }\r
+                ICLog.i("return "+ gsmSb.toString());\r
+                return gsmSb.toString();\r
+            }\r
+        } else {\r
+            ICLog.i("operator == null || operator.length() <= 3");\r
+            return null;\r
+        }\r
+    }\r
+\r
+    public void getWifiInfo() {\r
+        if (this.wifiManager.isWifiEnabled()) {\r
+            this.IS_HASOPEN = true;\r
+        } else {\r
+            this.wifiManager.setWifiEnabled(true);\r
+            this.IS_OPEN = true;\r
+            this.startTimer();\r
+        }\r
+    }\r
+\r
+    public void registerBroadReceiver() {\r
+        IntentFilter var1 = new IntentFilter();\r
+        var1.addAction("android.net.wifi.WIFI_STATE_CHANGED");\r
+        this.context.registerReceiver(this.wifiChangedReceiver, var1);\r
+    }\r
+\r
+    public void setOnWiFiInfoListener(LBSHelper.OnWiFiInfoListener var1) {\r
+        this.mListener = var1;\r
+    }\r
+\r
+    private class MyPhoneStateListener extends PhoneStateListener {\r
+        private MyPhoneStateListener() {\r
+        }\r
+\r
+        public void onSignalStrengthsChanged(SignalStrength ss) {\r
+            super.onSignalStrengthsChanged(ss);\r
+//            if (((TelephonyManager) LBSHelper.this.context.getSystemService(Context.TELEPHONY_SERVICE)).getNetworkType() == NETWORK_TYPE_LTE) {\r
+//                String[] siglist = ss.toString().split(" ");\r
+//                LBSHelper.this.mLastSignal = Integer.parseInt(siglist[9]) + 110;\r
+//            } else {\r
+//                LBSHelper.this.mLastSignal = ss.getGsmSignalStrength() * 2 - 113 + 110;\r
+//            }\r
+//            LBSHelper.this.runtime.setSignalStrength(LBSHelper.this.mLastSignal - 110);\r
+            LBSHelper.this.mLastSignal = ss.getGsmSignalStrength();//ss.getDbm();\r
+            LBSHelper.this.runtime.setSignalStrength(LBSHelper.this.mLastSignal);\r
+        }\r
+    }\r
+\r
+    public interface OnWiFiInfoListener {\r
+        void getWifiInfoCallBack(String var1);\r
+    }\r
+}\r
index f8f0854..654d104 100644 (file)
@@ -214,6 +214,17 @@ public class protocolAPIHelper {
                 .append(ds.getStepCount()).append(CMDSPLIT).append(ds.getRolltimes()).append(CMDEND).toString();\r
     }\r
 \r
+    public String AP01(deviceStatus ds){\r
+        //示例数据:IWAP01080524A2232.9806N11404.9355E000.1061830323.8706000908000102,\r
+        // 460,0,9520,3671,\r
+        // Home|74-DE-2B-44-88-8C|97& Home1|74-DE-2B-44-88-8C|97&Home2|74-DE-2B-44-88-8C|97& Home3|74-DE-2B-44-88-8C|97#\r
+//        IWAP01191230A2232.9807N11404.9355E000.1161320000.0006000910000000,460,00,9520,3671,#\r
+        return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP01)).append(ds.getShortDate())\r
+                .append(ds.getGPSData()).append(ds.getShortTime()).append(ds.getGPSHeading()).append(ds.getGSMSignal())\r
+                .append(ds.getGPSLocationStarNums()).append(ds.getBatteryLevel()).append("0")\r
+                .append(ds.getProtection()).append(ds.getWorkMode()).append(CMDSPLIT)\r
+                .append(ds.getLBSData()).append(CMDSPLIT).append(ds.getWifiData()).append(CMDEND).toString();\r
+    }\r
     public String AP28(String name,String msg,int packagecount,int currentpackageindex,int received_success){\r
         //示例数据:IWAP28,D3590D54,xxxx,6,1,1#\r
         return new StringBuffer(CMDHEADER).append(cmdMap.get(CMD_TYPE.AP28))\r
@@ -233,6 +244,9 @@ public class protocolAPIHelper {
             case BP00:\r
                 handleBP00(cmd);\r
                 break;\r
+            case BP01:\r
+                handleBP01(cmd);\r
+                break;\r
             case BP03:\r
                 handleBP03(cmd);\r
                 break;\r
@@ -260,9 +274,14 @@ public class protocolAPIHelper {
         }\r
     }\r
 \r
+    //处理 心跳 BP01\r
+    private void handleBP01(String cmd){\r
+        log("BP01定位接收成功");\r
+    }\r
+\r
     //处理 心跳 BP03\r
     private void handleBP03(String cmd){\r
-\r
+        log("BP03心跳接收成功");\r
     }\r
     //处理 BP28 语音消息\r
     private void handleBP28(String cmd) {\r
@@ -276,6 +295,8 @@ public class protocolAPIHelper {
             log(msg[5]);\r
             log(msg[6]);\r
             \r
+        }else{\r
+            log("handleBP28","format Error");\r
         }\r
 \r
     }\r
diff --git a/app/src/main/java/com/ic/protocol/bean/ICLocation.java b/app/src/main/java/com/ic/protocol/bean/ICLocation.java
new file mode 100644 (file)
index 0000000..4ddfacc
--- /dev/null
@@ -0,0 +1,113 @@
+package com.ic.protocol.bean;\r
+\r
+import java.util.HashMap;\r
+\r
+public class ICLocation {\r
+\r
+    private LOCATION_STAT currentStat;\r
+    private GPS_LocationPoint currentLP=null;\r
+    private LBS_Data currentLBS=null;\r
+    public class GPS_LocationPoint{\r
+        public double lat;\r
+        public double lon;\r
+        public double speed;\r
+        public double heading;\r
+        public int used_gps_numbs;\r
+    }\r
+    public class LBS_Data{\r
+        HashMap<String ,Integer> wifi_aps=null;\r
+        HashMap<String , Integer> gsm_stations=null;\r
+    }\r
+    public enum LOCATION_STAT{\r
+        LOCATION_FIXED,\r
+        LOCATION_GPS_FAILED,\r
+        LOCATION_WIFI_FAILED,\r
+    }\r
+\r
+    public ICLocation(){\r
+        if (currentLP == null)\r
+            currentLP=new GPS_LocationPoint();\r
+\r
+        currentStat = LOCATION_STAT.LOCATION_FIXED;\r
+        if (currentLBS == null)\r
+            currentLBS = new LBS_Data();\r
+        if (currentLBS.gsm_stations==null)\r
+            currentLBS.gsm_stations=new HashMap<String,Integer>();\r
+        if (currentLBS.wifi_aps==null)\r
+            currentLBS.wifi_aps=new HashMap<String,Integer>();\r
+\r
+        init_data();\r
+    }\r
+\r
+\r
+    private void init_data(){\r
+        currentLP.lat=2232.9806f;\r
+        currentLP.lon=11404.9355f;\r
+        currentLP.speed=000.1f;\r
+        currentLP.heading=0.0f;\r
+\r
+        currentLBS.wifi_aps.put("74-DE-2B-44-88-8C",97);\r
+        currentLBS.wifi_aps.put("74-DE-2B-44-88-8D",97);\r
+\r
+\r
+    }\r
+    public LOCATION_STAT getLocationStat(){\r
+        return currentStat;\r
+    }\r
+\r
+    public GPS_LocationPoint  getLocation(){\r
+        return currentLP;\r
+    }\r
+\r
+    public void setLocation(double lat,double lon,double speed,double heading){\r
+        currentLP.lat=lat;\r
+        currentLP.lon=lon;\r
+        currentLP.speed=speed;\r
+        currentLP.heading=heading;\r
+    }\r
+\r
+    public void clearLBSdata(){\r
+        currentLBS.wifi_aps.clear();\r
+        currentLBS.gsm_stations.clear();\r
+    }\r
+\r
+    public void append_gsmstation(String station,int rssi){\r
+        currentLBS.gsm_stations.put(station,rssi);\r
+    }\r
+    public void append_wifiap(String wifi,int rssi){\r
+        currentLBS.wifi_aps.put(wifi,rssi);\r
+    }\r
+\r
+\r
+    //        MCC,Mobile Country Code,移动国家代码(中国的为460);\r
+//        MNC,Mobile Network Code,移动网络号码(中国移动为00,中国联通为01);\r
+//        LAC,Location Area Code,位置区域码;\r
+//        CID,Cell Identity,基站编号,是个16位的数据(范围是0到65535)。\r
+\r
+\r
+    private String MCC;\r
+    private String MNC;\r
+    private long LAC;\r
+    private long CID;\r
+    public void setMCC(String mcc){ MCC=mcc;}\r
+    public void setMNC(String mnc){MNC = mnc;}\r
+    public void setLAC(long  lac){LAC=lac;}\r
+    public void setCID(long cid) { CID=cid;}\r
+    public String getMCC(){\r
+        return MCC;\r
+    }\r
+    public String getMNC(){\r
+        return MNC;\r
+    }\r
+    public long getLAC(){\r
+        return LAC;\r
+    }\r
+    public long getGSMStationCID(){\r
+        return CID;\r
+    }\r
+\r
+    public LBS_Data getLBSdata(){\r
+        return currentLBS;\r
+    }\r
+\r
+}\r
index 379feaa..7be8753 100644 (file)
 package com.ic.protocol.bean;\r
 \r
+import com.ic.protocol.utils.ICLog;\r
+\r
+import java.text.ParseException;\r
+import java.text.SimpleDateFormat;\r
+import java.util.Calendar;\r
+import java.util.Date;\r
+import java.util.Locale;\r
+\r
 public class deviceStatus {\r
-    private String imei="867155030001063";\r
-    private final String UserDebug ="userdebug";\r
-    private final String User ="user";\r
+    private String imei = "867155030001063";\r
+    private final String UserDebug = "userdebug";\r
+    private final String User = "user";\r
+\r
+    private ICLocation gpsp = null;\r
 \r
+    public deviceStatus() {\r
+        if (gpsp == null) gpsp = new ICLocation();\r
+    }\r
 \r
-    public String getIMEI(){\r
+    public String getIMEI() {\r
         return imei;\r
     }\r
 \r
 \r
-    public boolean isNetworkAvailable(){\r
+    public boolean isNetworkAvailable() {\r
         return true;\r
     }\r
 \r
     /*\r
     return UserDebug , User\r
      */\r
-    public String BuildType()\r
-    {\r
+    public String BuildType() {\r
         return UserDebug;\r
     }\r
 \r
 \r
-    public String HardwareInfo(){\r
+    public String HardwareInfo() {\r
         return "SC9820E C41 V1.0";\r
     }\r
 \r
-    public String BuildVersion(){\r
+    public String BuildVersion() {\r
         return "C41-GW-V0.0.1";\r
     }\r
 \r
-    public String getBatteryLevel(){\r
+    public String getBatteryLevel() {\r
         return "100";\r
     }\r
 \r
-    public String getGSMSignal(){\r
+    /*    AP03 心跳包     */\r
+    public String getGSMSignal() {\r
         return "060";\r
     }\r
 \r
-    public String getGPSLocationStarNums(){\r
+    public String getGPSLocationStarNums() {\r
         return "009";\r
     }\r
-    public String getProtection(){\r
+\r
+    public String getProtection() {\r
         return "00";\r
     }\r
-    public String getWorkMode(){\r
+\r
+    public String getWorkMode() {\r
         return "00";\r
     }\r
-    public String getStepCount(){\r
+\r
+    public String getStepCount() {\r
         return "23425";\r
     }\r
 \r
-    public String getRolltimes(){\r
+    public String getRolltimes() {\r
         return "00";\r
     }\r
+    /*  AP03 心跳包 end       */\r
+\r
+    /*  AP01 定位       */\r
+\r
+    /* 返回 2位年2位月2位日, 如2019-12-30 返回 191230*/\r
+    public String getShortDate() {\r
+        String DEFAULT_TIME_FORMAT = "yyMMdd";\r
+        SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_TIME_FORMAT);\r
+        String dateStr = dateFormatter.format(Calendar.getInstance().getTime());//获取当前时间\r
+        return dateStr;\r
+    }\r
+\r
+    public void parseDatetiime(String datetimeStr){\r
+\r
+    SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH);//输入的被转化的时间格式\r
+    SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//需要转化成的时间格式\r
+    SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");\r
+        Date date1 = null;\r
+        try {\r
+            date1 = dff.parse(datetimeStr);\r
+        } catch (ParseException e) {\r
+            e.printStackTrace();\r
+        }\r
+        String str1 = df1.format(date1);\r
+        String str2 = df2.format(date1);\r
+\r
+    }\r
+    /*061830: 格林尼治时间06 点18 分30 秒 */\r
+    public String getShortTime(){\r
+        String DEFAULT_TIME_FORMAT = "HHmmss";\r
+        //设置时间的格式\r
+        //                      yyyy-MM-dd 1969-12-31\r
+        //                      yyyy-MM-dd 1970-01-01\r
+        //                yyyy-MM-dd HH:mm 1969-12-31 16:00\r
+        //                yyyy-MM-dd HH:mm 1970-01-01 00:00\r
+        //               yyyy-MM-dd HH:mmZ 1969-12-31 16:00-0800\r
+        //               yyyy-MM-dd HH:mmZ 1970-01-01 00:00+0000\r
+        //        yyyy-MM-dd HH:mm:ss.SSSZ 1969-12-31 16:00:00.000-0800\r
+        //        yyyy-MM-dd HH:mm:ss.SSSZ 1970-01-01 00:00:00.000+0000\r
+        //      yyyy-MM-dd'T'HH:mm:ss.SSSZ 1969-12-31T16:00:00.000-0800\r
+        //      yyyy-MM-dd'T'HH:mm:ss.SSSZ 1970-01-01T00:00:00.000+0000\r
+        //注:HH显示的是24小时制,hh显示的是12小时制\r
+\r
+        SimpleDateFormat dateFormatter = new SimpleDateFormat(DEFAULT_TIME_FORMAT);\r
+        String dateStr = dateFormatter.format(Calendar.getInstance().getTime());//获取当前时间\r
+//        SimpleDateFormat dff = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss.SSS", Locale.ENGLISH);//输入的被转化的时间格式\r
+//        SimpleDateFormat df1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");//需要转化成的时间格式\r
+//        SimpleDateFormat df2 = new SimpleDateFormat("yyyyMMddHHmmssSSS");\r
+\r
+        return dateStr;\r
+    }\r
+\r
+    public boolean isGPSFixed(){\r
+        return (gpsp.getLocationStat() == ICLocation.LOCATION_STAT.LOCATION_FIXED);\r
+    }\r
+\r
+    public String getGPSData(){\r
+//        2232.9806N11404.9355E000.1: 北纬22度32.9806分,东经114度04.9355分,速度为000.1 km/h,如经纬度无效,可默认全为0,如0000.0000N00000.0000E\r
+//        纬度格式为: ddmm.mmmm ,长度不足长度前补0\r
+//        经度格式为:dddmm.mmmm,长度不足前补0\r
+        StringBuilder sb=new StringBuilder();\r
+        int lati=(int)gpsp.getLocation().lat;\r
+        int latl=(int) ((gpsp.getLocation().lat - lati)*10000);\r
+        int loni=(int)gpsp.getLocation().lon;\r
+        int lonl=(int) ((gpsp.getLocation().lon - loni)*10000);\r
+        int speedi=(int)gpsp.getLocation().speed;\r
+        int speedl=(int) ((gpsp.getLocation().speed - speedi)*10);\r
+\r
+         if (isGPSFixed())\r
+        {\r
+            String gpsStr=String.format("%04d.%04dN%05d.%04dE%03d.%01d",lati,latl,loni,lonl,speedi,speedl);\r
+            sb.append("A").append(gpsStr);\r
+        }else{\r
+             String gpsStr=String.format("%04d.%04dN%05d.%04dE%03d.%01d",0,0,0,0,0,0);\r
+             sb.append("V").append(gpsStr);\r
+        }\r
+\r
+\r
+        return sb.toString();\r
+    }\r
+\r
+    public String getGPSHeading(){\r
+        int headingi=(int)gpsp.getLocation().heading;\r
+        int headingl=(int) ((gpsp.getLocation().heading - headingi)*100);\r
+        String gpsStr=String.format("%03d.%02d",headingi,headingl);\r
+        return gpsStr;\r
+    }\r
+\r
+    public void setSignalStrength(int signal){\r
+        ICLog.i("setSignalStrength "+signal);\r
+    }\r
+\r
+    public void setMccAndMnc(String MccMnc){\r
+        String [] list=MccMnc.split("@");\r
+        if (list.length>=2){\r
+            gpsp.setMCC(list[0]);\r
+            gpsp.setMNC(list[1]);\r
+        }\r
+        ICLog.i("setMccAndMnc "+MccMnc);\r
+    }\r
+\r
+    public void setCdmaInfo(String cdma){\r
+        ICLog.i("setCdmaInfo "+cdma);\r
+    }\r
+\r
+    private String cellinfo;\r
+    public void setCurrentCellInfo(String _cellinfo){\r
+        ICLog.i("setCurrentCellInfo "+_cellinfo);\r
+        cellinfo = _cellinfo;\r
+    }\r
+\r
+    public String getCurrentCellInfo(){\r
+        return cellinfo;\r
+    }\r
+\r
+    public String getLBSData(){\r
+\r
+//        460,0,9520,3671 : LBS基站数据,MCC国家码,460为中国,0:MNC,0为移动,9520:LAC,十进制,3671,CID,十进制\r
+        StringBuilder sb=new StringBuilder();\r
+        sb.append(gpsp.getMCC()).append(",")\r
+                .append(gpsp.getMNC()).append(",")\r
+                .append(gpsp.getLAC()).append(",")\r
+                .append(gpsp.getGSMStationCID());\r
+        return sb.toString();\r
+    }\r
+\r
+    public String getWifiData(){\r
+        StringBuilder sb=new StringBuilder();\r
+\r
+           int i=0;\r
+           for (String mac : gpsp.getLBSdata().wifi_aps.keySet()){\r
+               sb.append("AP").append(i).append("|").append(mac).append("|").append(gpsp.getLBSdata().wifi_aps.get(mac)).append(",");\r
+               i++;\r
+           }\r
+            if (i>0){\r
+                int index=sb.lastIndexOf(",");\r
+                sb.replace(index,index+1,"");\r
+            }\r
+        return sb.toString();\r
+    }\r
+    /*  AP01 定位 end       */\r
 }\r
diff --git a/app/src/main/java/com/ic/protocol/bean/location.java b/app/src/main/java/com/ic/protocol/bean/location.java
deleted file mode 100644 (file)
index c905b32..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-package com.ic.protocol.bean;\r
-\r
-public class location {\r
-\r
-    private LOCATION_STAT currentStat;\r
-    private LocationPoint currentLP=new LocationPoint();\r
-    public class LocationPoint{\r
-        public double lat;\r
-        public double lon;\r
-    }\r
-    public enum LOCATION_STAT{\r
-        LOCATION_SUCCESS,\r
-        LOCATION_GPS_FAILED,\r
-        LOCATION_WIFI_FAILED,\r
-    }\r
-    public LOCATION_STAT getLocationStat(){\r
-        return currentStat;\r
-    }\r
-\r
-    public LocationPoint  getLocation(){\r
-        return currentLP;\r
-    }\r
-\r
-    public void setLocation(double lat,double lon){\r
-        currentLP.lat=lat;\r
-        currentLP.lon=lon;\r
-    }\r
-}\r
index 024b8c8..68aa148 100644 (file)
@@ -2,10 +2,12 @@ package com.ic.protocol.service;
 \r
 import android.app.Service;\r
 import android.content.Intent;\r
+import android.net.wifi.WifiManager;\r
 import android.os.IBinder;\r
 import android.support.annotation.Nullable;\r
 import android.widget.Toast;\r
 \r
+import com.ic.protocol.adapter.LBSHelper;\r
 import com.ic.protocol.adapter.protocolAPIHelper;\r
 import com.ic.protocol.bean.Config;\r
 import com.ic.protocol.bean.deviceStatus;\r
@@ -42,6 +44,7 @@ public class protocolMainServer extends Service {
     private Toastc toast = null;\r
 \r
     private static protocolMainServer mProtocolServer=null;\r
+    private static LBSHelper lbshelper=null;\r
 \r
     public boolean isServerConnected(){\r
         return (RxSocket.getInstance().getSocketStatus()==RxSocket.SocketStatus.CONNECTED)?true:false;\r
@@ -146,11 +149,12 @@ public class protocolMainServer extends Service {
     private static boolean mCallStateIsIdle = true;     // 非通话活动\r
      private TelephonyManager telManager;\r
     private Timer mTimer_keepalive=null;\r
-\r
+    private WifiManager mWifiManager=null;\r
     private Config mConfig=null;\r
-    private deviceStatus mDevStat=null;\r
+    private static deviceStatus mDevStat=null;\r
     private protocolAPIHelper mProtocolAPI=null;\r
 \r
+\r
     private void log(String msg) {\r
         ICLog.log(TAG,msg);\r
     }\r
@@ -193,8 +197,14 @@ public class protocolMainServer extends Service {
     private void init_protocols(){\r
 \r
         if (mConfig == null) mConfig = new Config();\r
-        if (mDevStat == null) mDevStat =new deviceStatus();\r
+        if (mDevStat == null) {\r
+            mDevStat =new deviceStatus();\r
+            log("new mDevStat");\r
+        }\r
         if (mProtocolAPI == null) mProtocolAPI = new protocolAPIHelper();\r
+        if (mWifiManager == null) mWifiManager = (WifiManager)this.getApplicationContext().getSystemService(Context.WIFI_SERVICE);\r
+        if (lbshelper==null) lbshelper = new LBSHelper(this,mWifiManager,mDevStat);\r
+\r
         toast = new Toastc(this, Toast.LENGTH_SHORT);\r
         //监听Socket的收包\r
         RxSocket.getInstance().read()\r
@@ -239,6 +249,14 @@ public class protocolMainServer extends Service {
         }\r
     }\r
 \r
+    public class WifiInfolistener implements LBSHelper.OnWiFiInfoListener {\r
+\r
+        @Override\r
+        public void getWifiInfoCallBack(String var1) {\r
+\r
+            log("getWifiInfoCallBack "+var1);\r
+        }\r
+    }\r
     public void do_timer_task(){\r
 \r
         if(!isServerConnected()) {\r
@@ -258,6 +276,20 @@ public class protocolMainServer extends Service {
         log("do_timer_task send cmd "+ mProtocolAPI.AP03(mDevStat));\r
         sendMsg(mProtocolAPI.AP03(mDevStat));\r
 \r
+        lbshelper.setOnWiFiInfoListener(new WifiInfolistener());\r
+        lbshelper.getWifiInfo();\r
+        lbshelper.getCellInfo(this.telManager);\r
+\r
+        log("do_timer_task send cmd "+ mProtocolAPI.AP01(mDevStat));\r
+\r
+        sendMsg(mProtocolAPI.AP01(mDevStat));\r
+\r
+\r
+    }\r
+\r
+    public void testGpsData(){\r
+       mProtocolAPI.AP01(mDevStat);\r
+        log( mProtocolAPI.AP01(mDevStat));\r
     }\r
     private void stopTimer(){\r
         if (mTimer_keepalive !=null){\r
index 86d7153..551558c 100644 (file)
@@ -4,7 +4,50 @@ import android.util.Log;
 \r
 public class ICLog {\r
     private static final boolean DEBUG = true; //BuildConfig.DEBUG;\r
+    private static String getFunctionName() {\r
+        StackTraceElement[] currentStack = Thread.currentThread().getStackTrace();\r
+        if (currentStack == null) {\r
+            return null;\r
+        } else {\r
+            int stackLen = currentStack.length;\r
 \r
+            for(int i = 0; i < stackLen; ++i) {\r
+                StackTraceElement stackElement = currentStack[i];\r
+                if (!stackElement.isNativeMethod() && !stackElement.getClassName().equals(Thread.class.getName()) && !stackElement.getClassName().equals(ICLog.class.getName())) {\r
+                    StringBuilder sb = new StringBuilder();\r
+                    sb.append("[ ");\r
+                    sb.append(Thread.currentThread().getName());\r
+                    sb.append(": ");\r
+                    sb.append(stackElement.getFileName());\r
+                    sb.append(":");\r
+                    sb.append(stackElement.getLineNumber());\r
+                    sb.append(" ");\r
+                    sb.append(stackElement.getMethodName());\r
+                    sb.append(" ]");\r
+                    return sb.toString();\r
+                }\r
+            }\r
+\r
+            return null;\r
+        }\r
+    }\r
+\r
+    public static void i(Object var0) {\r
+        if (DEBUG) {\r
+            String var1 = getFunctionName();\r
+            if (var1 != null) {\r
+                StringBuilder sb = new StringBuilder();\r
+                sb.append(var1);\r
+                sb.append(" - ");\r
+                sb.append(var0.toString());\r
+                log("WatchService", sb.toString());\r
+                return;\r
+            }\r
+\r
+            log("WatchService", var0.toString());\r
+        }\r
+\r
+    }\r
     public static  void log(String TAG, String msg) {\r
         if (DEBUG) {\r
             Log.i(TAG, msg);\r