1、修改GPS 定位解析方式,采用NMEA进行解析,以便解决定位状态一直获取不到的问题。
authorsnickersun <scy@incartech.cn>
Tue, 10 Mar 2020 16:38:10 +0000 (00:38 +0800)
committersnickersun <scy@incartech.cn>
Tue, 10 Mar 2020 16:38:10 +0000 (00:38 +0800)
2、修改界面,增加调试button,可以上传日志,设置工作模式1,3,5
3、短信修改:修复wifi关闭时不能短信设置链接方式的问题。添加wifi息屏不关机选项。
4、添加活动Activity判断,如果在进行工厂测试,则停止操作GPS,以防测试冲突。

16 files changed:
app/build.gradle
app/release/ICSer_V372_2003091732_release.apk [deleted file]
app/src/main/AndroidManifest.xml
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/LocationClient.java
app/src/main/java/com/enqualcomm/support/MainActivity.java
app/src/main/java/com/enqualcomm/support/NMEAListener.java
app/src/main/java/com/enqualcomm/support/bean/Runtime.java
app/src/main/java/com/enqualcomm/support/service/Deliver.java
app/src/main/java/com/enqualcomm/support/toolActivity.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/utils/DeviceInfoUtil.java
app/src/main/java/com/enqualcomm/support/utils/SimSignalUtil.java
app/src/main/java/com/enqualcomm/support/utils/Util.java
app/src/main/res/layout/activity_main.xml
app/src/main/res/layout/activity_tool.xml [new file with mode: 0644]

index bbc4d72..539d7c7 100644 (file)
@@ -84,12 +84,13 @@ android {
 //    }
 }
 dependencies {
+    implementation 'com.android.support.constraint:constraint-layout:1.1.3'
     compile fileTree(include: ['*.jar', '*.aar'], dir: 'libs')
     androidTestCompile('com.android.support.test.espresso:espresso-core:2.2.2', {
         exclude group: 'com.android.support', module: 'support-annotations'
     })
-    compile 'com.android.support:appcompat-v7:25.1.0'
-    compile 'com.github.ChestnutPlus:TestModules:v1.0.16'
+    implementation 'com.android.support:appcompat-v7:25.1.0'
+    implementation 'com.github.ChestnutPlus:TestModules:v1.0.16'
     testCompile 'junit:junit:4.12'
     implementation project(path: ':dNSCache')
 }
@@ -117,4 +118,4 @@ def releaseTime() {
 
     return new Date().format("yyMMddHHmm", TimeZone.getTimeZone("GMT+08:00"))
 
-}
\ No newline at end of file
+}
diff --git a/app/release/ICSer_V372_2003091732_release.apk b/app/release/ICSer_V372_2003091732_release.apk
deleted file mode 100644 (file)
index 88f36ea..0000000
Binary files a/app/release/ICSer_V372_2003091732_release.apk and /dev/null differ
index 6166794..b1e1d14 100644 (file)
 <?xml version="1.0" encoding="utf-8"?>
 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
-    android:sharedUserId="android.uid.system"
+    package="com.enqualcomm.support"
+    android:allowBackup="true"
     android:persistent="true"
     android:screenOrientation="portrait"
-    android:supportsRtl="true"
-    android:allowBackup="true"
-    package="com.enqualcomm.support">
-    <!--按用户发送消息-->
-    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
-
-    <!--允许程序读取或写入系统设置 -->
-    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
-
-    <!-- 联网的权限 -->
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
-    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
-    <uses-permission android:name="android.permission.INTERNET"/>
-
-    <!--打电话权限-->
-    <uses-permission android:name="android.permission.CALL_PHONE"/>
-
-    <!--监听电话状态权限-->
-    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
-    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS"/>
-    <uses-permission android:name="android.permission.READ_CALL_LOG"/>
-
-    <!--联系人-->
-    <uses-permission android:name="android.permission.READ_CONTACTS"/>
-    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
-
-    <!--灭屏-->
-    <uses-permission android:name="android.permission.WAKE_LOCK"/>
-
-    <!--<user-permission android:name="android.permission.DEVICE_POWER"/>-->
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-
-    <!--删除进程-->
-    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES"/>
-
-    <!--监听FOTA消息-->
-    <permission android:name="com.adups.fota.permission"/>
-
-    <!--振动-->
-    <uses-permission android:name="android.permission.VIBRATE"/>
-
-    <!--高德定位SDK需要的权限 BEGIN-->
-    <!--用于进行网络定位-->
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
-    <!--用于访问GPS定位-->
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
-    <!--用于获取运营商信息,用于支持提供运营商信息相关的接口-->
+    android:sharedUserId="android.uid.system"
+    android:supportsRtl="true">
+    <!-- 按用户发送消息 -->
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" /> <!-- 允许程序读取或写入系统设置 -->
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" /> <!-- 联网的权限 -->
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.INTERNET" /> <!-- 打电话权限 -->
+    <uses-permission android:name="android.permission.CALL_PHONE" /> <!-- 监听电话状态权限 -->
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.PROCESS_OUTGOING_CALLS" />
+    <uses-permission android:name="android.permission.READ_CALL_LOG" /> <!-- 联系人 -->
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" /> <!-- 灭屏 -->
+    <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- <user-permission android:name="android.permission.DEVICE_POWER"/> -->
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 删除进程 -->
+    <uses-permission android:name="android.permission.FORCE_STOP_PACKAGES" /> <!-- 监听FOTA消息 -->
+    <permission android:name="com.adups.fota.permission" /> <!-- 振动 -->
+    <uses-permission android:name="android.permission.VIBRATE" /> <!-- 高德定位SDK需要的权限 BEGIN -->
+    <!-- 用于进行网络定位 -->
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <!-- 用于访问GPS定位 -->
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <!-- 用于获取运营商信息,用于支持提供运营商信息相关的接口 -->
     <!-- <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission> -->
-    <!--用于访问wifi网络信息,wifi信息会用于进行网络定位-->
+    <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位 -->
     <!-- <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> -->
-    <!--用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
-    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
-    <!--用于访问网络,网络定位需要上网-->
+    <!-- 用于获取wifi的获取权限,wifi信息会用来进行网络定位 -->
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 用于访问网络,网络定位需要上网 -->
     <!-- <uses-permission android:name="android.permission.INTERNET"></uses-permission> -->
-    <!--用于读取手机当前的状态-->
+    <!-- 用于读取手机当前的状态 -->
     <!-- <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission> -->
-    <!--用于写入缓存数据到扩展存储卡-->
-    <!--<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>-->
-    <!--用于申请调用A-GPS模块-->
-    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS"/>
-    <!--用于申请获取蓝牙信息进行室内定位-->
-    <uses-permission android:name="android.permission.BLUETOOTH"/>
-    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN"/>
-    <!--高德定位SDK需要的权限 END-->
-
-
-    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
-    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS"/>
-    <uses-permission android:name="android.permission.INTERNET"/>
-    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
-    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
-    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
-    <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES"/>
-    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
-    <uses-permission android:name="android.permission.WRITE_SETTINGS"/>
-    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS"/>
-    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
-    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/>
-    <uses-permission android:name="android.permission.WAKE_LOCK"/>
-    <uses-permission android:name="android.permission.DEVICE_POWER"/>
-    <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
-    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION"/>
-    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
-    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/>
-    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
-    <uses-permission android:name="android.permission.CAMERA"/>
-    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
-    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS"/>
-    <uses-permission android:name="android.permission.VIBRATE"/>
-    <uses-permission android:name="android.permission.BLUETOOTH"/>
-    <uses-permission android:name="android.permission.SEND_SMS"/>
-    <uses-permission android:name="android.permission.RECEIVE_SMS"/>
-    <uses-permission android:name="android.permission.READ_SMS"/>
-    <uses-permission android:name="android.permission.READ_CONTACTS"/>
-    <uses-permission android:name="android.permission.WRITE_CONTACTS"/>
-    <uses-permission android:name="android.permission.BODY_SENSORS"/>
-    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/>
-    <uses-permission android:name="android.permission.READ_CALL_LOG"/>
-    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
-    <uses-feature android:name="android.hardware.camera"/>
-    <uses-feature android:name="android.hardware.camera.autofocus"/>
-    <uses-permission android:name="android.permission.GET_TASKS"/>
-
+    <!-- 用于写入缓存数据到扩展存储卡 -->
+    <!-- <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> -->
+    <!-- 用于申请调用A-GPS模块 -->
+    <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <!-- 用于申请获取蓝牙信息进行室内定位 -->
+    <uses-permission android:name="android.permission.BLUETOOTH" />
+    <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" /> <!-- 高德定位SDK需要的权限 END -->
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.INTERACT_ACROSS_USERS" />
+    <uses-permission android:name="android.permission.INTERNET" />
+    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
+    <uses-permission android:name="android.permission.ACCESS_COARSE_UPDATES" />
+    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
+    <uses-permission android:name="android.permission.WRITE_SETTINGS" />
+    <uses-permission android:name="android.permission.WRITE_SECURE_SETTINGS" />
+    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
+    <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
+    <uses-permission android:name="android.permission.WAKE_LOCK" />
+    <uses-permission android:name="android.permission.DEVICE_POWER" />
+    <uses-permission android:name="android.permission.READ_PHONE_STATE" />
+    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
+    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
+    <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
+    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.CAMERA" />
+    <uses-permission android:name="android.permission.RECORD_AUDIO" />
+    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+    <uses-permission android:name="android.permission.VIBRATE" />
+    <uses-permission android:name="android.permission.BLUETOOTH" />
+    <uses-permission android:name="android.permission.SEND_SMS" />
+    <uses-permission android:name="android.permission.RECEIVE_SMS" />
+    <uses-permission android:name="android.permission.READ_SMS" />
+    <uses-permission android:name="android.permission.READ_CONTACTS" />
+    <uses-permission android:name="android.permission.WRITE_CONTACTS" />
+    <uses-permission android:name="android.permission.BODY_SENSORS" />
+    <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
+    <uses-permission android:name="android.permission.READ_CALL_LOG" />
+    <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />
+
+    <uses-feature android:name="android.hardware.camera" />
+    <uses-feature android:name="android.hardware.camera.autofocus" />
+
+    <uses-permission android:name="android.permission.GET_TASKS" />
     <uses-permission android:name="android.permission.WRITE_APN_SETTINGS" />
 
-    <permission android:name="com.enqualcomm.support.permission.MIPUSH_RECEIVE" android:protectionLevel="signature"/>
-    <uses-permission android:name="com.enqualcomm.support.permission.MIPUSH_RECEIVE"/>
-    <protected-broadcast android:name="com.enqualcomm.support.ACTION_EQC_ALARM"/>
-    <protected-broadcast android:name="com.eqc.heartrate.action.SILENT_START"/>
-    <protected-broadcast android:name="com.enqualcomm.support.ACTION_ISCONNECTED"/>
-    <protected-broadcast android:name="com.eqc.deskclock.YUN_ALARM_CHANGE"/>
-    <protected-broadcast android:name="com.enqualcomm.support.sos"/>
+    <permission
+        android:name="com.enqualcomm.support.permission.MIPUSH_RECEIVE"
+        android:protectionLevel="signature" />
+
+    <uses-permission android:name="com.enqualcomm.support.permission.MIPUSH_RECEIVE" />
 
+    <protected-broadcast android:name="com.enqualcomm.support.ACTION_EQC_ALARM" />
+    <protected-broadcast android:name="com.eqc.heartrate.action.SILENT_START" />
+    <protected-broadcast android:name="com.enqualcomm.support.ACTION_ISCONNECTED" />
+    <protected-broadcast android:name="com.eqc.deskclock.YUN_ALARM_CHANGE" />
+    <protected-broadcast android:name="com.enqualcomm.support.sos" />
 
     <application
         android:name=".ICApplication"
         android:icon="@mipmap/ic_launcher"
         android:supportsRtl="true"
         android:theme="@style/AppTheme">
-        <activity android:name="com.enqualcomm.support.MainActivity" >
+        <activity android:name=".toolActivity"></activity>
+        <activity android:name=".MainActivity">
             <intent-filter>
                 <action android:name="android.intent.action.MAIN" />
 
             </intent-filter>
         </activity>
 
-        <service android:name="com.enqualcomm.support.CoreService">   <!--协议通讯服务-->
+        <service android:name=".CoreService"> <!-- 协议通讯服务 -->
             <intent-filter>
                 <action android:name="com.enqualcomm.support.startsrv" />
                 <action android:name="com.enqualcomm.support.ACTION_ALARM" />
                 <action android:name="com.enqualcomm.support.HEART_ALARM" />
             </intent-filter>
         </service>
-        <service android:name="com.enqualcomm.support.CoreService$InnerService"/>
+        <service android:name=".CoreService$InnerService" />
 
         <provider
+            android:name=".ICContentProvider"
             android:authorities="com.enqualcomm.support"
-            android:exported="true"
-            android:name="com.enqualcomm.support.ICContentProvider"/>
+            android:exported="true" />
 
-        <receiver android:exported="true" android:name="com.enqualcomm.support.BootCompleteReceiver">
+        <receiver
+            android:name=".BootCompleteReceiver"
+            android:exported="true">
             <intent-filter>
-                <action android:name="android.intent.action.BOOT_COMPLETED"/>
+                <action android:name="android.intent.action.BOOT_COMPLETED" />
             </intent-filter>
         </receiver>
-        <receiver android:exported="true" android:name="com.enqualcomm.support.utils.ProcessReceiver">
+        <receiver
+            android:name=".utils.ProcessReceiver"
+            android:exported="true">
             <intent-filter>
-                <action android:name="com.enqualcomm.support.DIALOG"/>
-                <action android:name="com.enqualcomm.imessage.RESUME_ACTION"/>
-                <action android:name="com.enqualcomm.support.ACTION_STEP_COUNT_ALARM"/>
-                <action android:name="com.enqualcomm.imessage.SOS_ACTION"/>
-                <action android:name="com.enqualcomm.support.ACTION_REMOTE_CAMERA"/>
-                <action android:name="com.enqualcomm.support.CloseUnreadMsg"/>
-                <action android:name="android.intent.action.BATTERY_LOW"/>
-                <action android:name="com.enqualcomm.support.ACTION_MISSED_CALL_GET"/>
-
-                <!--                <action android:name="com.eqc.heartrate.action.SILENT_START" />-->
+                <action android:name="com.enqualcomm.support.DIALOG" />
+                <action android:name="com.enqualcomm.imessage.RESUME_ACTION" />
+                <action android:name="com.enqualcomm.support.ACTION_STEP_COUNT_ALARM" />
+                <action android:name="com.enqualcomm.imessage.SOS_ACTION" />
+                <action android:name="com.enqualcomm.support.ACTION_REMOTE_CAMERA" />
+                <action android:name="com.enqualcomm.support.CloseUnreadMsg" />
+                <action android:name="android.intent.action.BATTERY_LOW" />
+                <action android:name="com.enqualcomm.support.ACTION_MISSED_CALL_GET" />
+
+                <!-- <action android:name="com.eqc.heartrate.action.SILENT_START" /> -->
             </intent-filter>
         </receiver>
-
-
     </application>
 
 </manifest>
\ No newline at end of file
index 0abe58b..95cfe5e 100644 (file)
@@ -319,7 +319,10 @@ public class CoreService extends Service {
                 }\r
             } else if ("android.intent.action.SCREEN_OFF".equals(param1Intent.getAction()) && Util.isWifiIsOpen(runtime.getContextProxy().context,runtime)) {\r
                 CoreService.is_wifi_network_ok = true;\r
-                Util.turnOffWifiForSleep(runtime.getContextProxy().context, runtime);\r
+                if (!runtime.isNoTurnOffWifiOnScreenOff()) {\r
+                    //不关闭wifi when ScreenOff\r
+                    Util.turnOffWifiForSleep(runtime.getContextProxy().context, runtime);\r
+                }\r
             }\r
         }\r
     };\r
index 6d05ce5..307bcc4 100644 (file)
@@ -352,8 +352,25 @@ public class ICSmsManager {
                             });\r
 \r
                         }else {\r
+                            sendSMS(phonenumber, "WiFi Control format error!");\r
+                        }\r
+                    } else if (tmp[1].startsWith("noTurnOffWhenScreenOff,")) {\r
+\r
+                        String tmplist[]=tmp[1].split(",");\r
+                        if (tmplist.length==2){\r
+                            String enabled=tmplist[1];\r
+                            boolean isenabled=enabled.toLowerCase().equals("true")?true:false;\r
+                          runtime.setNoTurnOffOnScreenOff(isenabled);\r
+                          StringBuilder sb=new StringBuilder();\r
+                          if (isenabled && !Util.isWifiIsOpen(runtime.getContextProxy().context,runtime)){\r
+                              Util.turnOnWifiForConnect(runtime.getContextProxy().context,runtime);\r
+                              sb.append(" Turn On Wifi first and ");\r
+                          }\r
+                          sb.append("set noTurnOffWhenScreenOff " + enabled);\r
+                          sendSMS(phonenumber,sb.toString() );\r
 \r
-                            sendSMS(phonenumber, "set SkipMoveCheck " + LocationClient.getSkipMoveCheck() + " success!");\r
+                        }else {\r
+                            sendSMS(phonenumber, "WiFi Control format error!");\r
                         }\r
                     } else {\r
                         sendSMS(phonenumber, "WiFi Control format error!");\r
@@ -426,7 +443,7 @@ public class ICSmsManager {
                                         }\r
                                     }\r
                                 });\r
-                            }else if (!logfile.isEmpty()&& logfile.startsWith("SDLog:")){\r
+                            }else if (!logfile.isEmpty()&& ( logfile.startsWith("SDLog:")||logfile.startsWith("SDLogInfo:"))){\r
 \r
                                 String sdfilelist[] = logfile.split(":");\r
                                 if (sdfilelist.length==2) {\r
@@ -442,30 +459,51 @@ public class ICSmsManager {
                                             }\r
                                             if ( new File(filepath).exists()) {\r
 \r
-                                                sendSMS(phonenumber, "start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");\r
+                                                sendSMS(phonenumber,"start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");\r
+\r
+                                                if (logfile.startsWith("SDLogInfo:")){\r
+                                                    Util.ShowToast(runtime,"start Upload " + filepath + " to " + Config.getFtpServer(mContext) + " ...");\r
+                                                }\r
                                                 String logtime = TimeUtil.getSystemTime3();\r
 \r
                                                 if (upload_logs_via_ftp) {\r
                                                     if (ftpUtils.upload(serverurl, Config.getFtpUser(mContext), Config.getFtpPWD(mContext), new File(filepath))) {\r
                                                         sendSMS(phonenumber, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");\r
+\r
+                                                        if (logfile.startsWith("SDLogInfo:")){\r
+                                                            Util.ShowToast(runtime,"Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");\r
+                                                        }\r
                                                     } else {\r
                                                         sendSMS(phonenumber, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " failed!");\r
+                                                        if (logfile.startsWith("SDLogInfo:")){\r
+                                                            Util.ShowToast(runtime,"Upload " + filepath + " to " + Config.getFtpServer(mContext) + " failed!");\r
+                                                        }\r
                                                     }\r
                                                 } else {\r
                                                     if (ICHttpUtil.uploadFile(filepath, runtime, logtime)) {\r
                                                         sendSMS(phonenumber, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");\r
+                                                        if (logfile.startsWith("SDLogInfo:")){\r
+                                                            Util.ShowToast(runtime,"Upload " + filepath + " to " + Config.getFtpServer(mContext) + " success!");\r
+                                                        }\r
                                                     } else {\r
                                                         sendSMS(phonenumber, "Upload " + filepath + " to " + Config.getFtpServer(mContext) + " failed!");\r
+                                                        if (logfile.startsWith("SDLogInfo:")){\r
+                                                            Util.ShowToast(runtime,"Upload " + filepath + " to " + Config.getFtpServer(mContext) + " failed!");\r
+                                                        }\r
                                                     }\r
                                                 }\r
                                             } else {\r
                                                 sendSMS(phonenumber, filepath + " not exist !");\r
+                                                if (logfile.startsWith("SDLogInfo:")){\r
+                                                    Util.ShowToast(runtime,filepath + " not exist !");\r
+                                                }\r
                                             }\r
                                         }\r
                                     });\r
                                 }else{\r
                                     sendSMS(phonenumber,  " SDLog format error !");\r
                                 }\r
+\r
                             }else{\r
                                 Observable.timer(500L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {\r
                                     public void call(Long param1Long) {\r
index 059ce5f..d9c48f0 100644 (file)
@@ -216,11 +216,17 @@ public class LocationClient {
     public void startGpsLocate() {\r
       ICLogger.i("开启GPS扫描");\r
       runtime.getLocationInstance().setLocationStat( ICLocation.LOCATION_STAT.LOCATION_OPEN); //此处为了检测是否定位时可以正确识别状态,以防一直处于GPS定位成功状态\r
-      Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, true);\r
-    Single.just(null).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Object>() {\r
-          public void call(Object param1Object) { LocationClient.this.nmeaListener.startListen(); }\r
-        });\r
 \r
+      //防止与工厂测试冲突\r
+      if (!DeviceInfoUtil.isFactoryTestTopActivity(runtime.getContextProxy().context)) {\r
+\r
+        Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, true);\r
+        Single.just(null).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Object>() {\r
+          public void call(Object param1Object) {\r
+            LocationClient.this.nmeaListener.startListen();\r
+          }\r
+        });\r
+      }\r
   }\r
 \r
   public void clearGPSlocateStat(){\r
@@ -383,10 +389,17 @@ public class LocationClient {
 //      Deliver.is_active_location = false;\r
 //      getLocationWakeLock();\r
 //    }\r
-    Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, false);\r
-    Single.just(null).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Object>() {\r
-          public void call(Object param1Object) { LocationClient.this.nmeaListener.stopListen(); }\r
-        });\r
+\r
+    //防止与工厂测试冲突\r
+    if (!DeviceInfoUtil.isFactoryTestTopActivity(runtime.getContextProxy().context)) {\r
+\r
+      Settings.Secure.setLocationProviderEnabled(runtime.getContextProxy().getResolver(), GPS_PROVIDER, false);\r
+      Single.just(null).observeOn(AndroidSchedulers.mainThread()).subscribe(new Action1<Object>() {\r
+        public void call(Object param1Object) {\r
+          LocationClient.this.nmeaListener.stopListen();\r
+        }\r
+      });\r
+    }\r
   }\r
   \r
 \r
@@ -469,6 +482,7 @@ public void updateCellInfo() {
       case ICLocation.NORMAL_MOD:\r
       default:\r
         clearGPSlocateStat(); //如果wifi优先,则确保gps关闭,防止切换回来gps状态错误,尤其是不NoStop模式下的gps切换回来有此风险。\r
+\r
         break;\r
     }\r
 \r
index eefe225..f05c033 100644 (file)
@@ -1,5 +1,6 @@
 package com.enqualcomm.support;
 
+import android.content.ComponentName;
 import android.content.Context;
 import android.content.Intent;
 import android.content.pm.PackageInfo;
@@ -18,6 +19,7 @@ import com.enqualcomm.support.R;
 import com.enqualcomm.support.adapter.protocolAPIHelper;
 import com.enqualcomm.support.utils.DeviceInfoUtil;
 import com.enqualcomm.support.utils.SimSignalUtil;
+import com.enqualcomm.support.utils.Util;
 import com.ic.jni.ICJniUtils;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.utils.ICLogger;
@@ -29,6 +31,8 @@ import java.util.concurrent.TimeUnit;
 import rx.Observable;
 import rx.functions.Action1;
 
+import static android.content.Intent.FLAG_ACTIVITY_NEW_TASK;
+
 public class MainActivity extends AppCompatActivity {
     TextView tv;
 
@@ -65,16 +69,21 @@ public class MainActivity extends AppCompatActivity {
 
         btnConnect.setOnClickListener(clickListener);
 
-        ToggleButton tbtn = (ToggleButton)findViewById(R.id.toggleButton);
-        tbtn.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener(){
-
+        Button tbtn = (Button)findViewById(R.id.btn_tools);
+        tbtn.setOnClickListener(new View.OnClickListener() {
             @Override
-            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
-                SimSignalUtil.send_at_to_onoff_simcard(CoreService.getInstance().runtime);
+            public void onClick(View view) {
+                Intent intent=new Intent();
+                ComponentName var3 = new ComponentName("com.enqualcomm.support", "com.enqualcomm.support.toolActivity");
+                intent.addFlags(FLAG_ACTIVITY_NEW_TASK);
+                intent.setComponent(var3);
+                startActivity(intent);
             }
         });
-        ToggleButton tbtnblood = (ToggleButton)findViewById(R.id.toggleButton2);
-        tbtnblood.setVisibility(View.GONE);
+
+
+//               SimSignalUtil.send_at_to_onoff_simcard(CoreService.getInstance().runtime));
+
 //        tbtnblood.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
 //            @Override
 //            public void onCheckedChanged(CompoundButton compoundButton, boolean b) {
@@ -137,11 +146,13 @@ public class MainActivity extends AppCompatActivity {
             switch (view.getId()) {
                 case R.id.btnConnect:
                     //进行连接Socket:这里使用的是,在本地上开启了一个服务器。
+                    Util.ShowToast(CoreService.getInstance().runtime,"Stop ProtocolService!");
                     stopService(new Intent(MainActivity.this,CoreService.class));// protocol service
 
                     //delay 5秒再重启
                     Observable.timer(5000L, TimeUnit.MILLISECONDS).subscribe(new Action1<Long>() {
                         public void call(Long param1Long) {
+                            Util.ShowToast(CoreService.getInstance().runtime,"Start ProtocolService!");
                             startService(new Intent(MainActivity.this,CoreService.class));// protocol service
                         }
                     });
index e8e98c1..4773563 100644 (file)
@@ -24,11 +24,26 @@ import java.util.List;
 \r
 public class NMEAListener implements NmeaListener, LocationListener {\r
   private boolean listening;\r
-  \r
+\r
+\r
+  public class  GpsSatellitePriv {\r
+    int prn;\r
+    float snr;\r
+    GpsSatellitePriv(int _prn, float _snr) {\r
+      prn=_prn;\r
+      snr=_snr;\r
+    }\r
+    public int getPrn() {\r
+      return prn;\r
+    }\r
+    public float getSnr() {\r
+      return snr;\r
+    }\r
+  }\r
   private LocationManager locationManager;\r
   private String locationInfo;\r
-  private List<GpsSatellite> numSatelliteList = new ArrayList<GpsSatellite>(); // 卫星信号\r
-  private List<GpsSatellite> max3Satellite = new ArrayList<GpsSatellite>(); // 卫星信号\r
+  private List<GpsSatellitePriv> numSatelliteList = new ArrayList<GpsSatellitePriv>(); // 卫星信号\r
+  private List<GpsSatellitePriv> max3Satellite = new ArrayList<GpsSatellitePriv>(); // 卫星信号\r
 \r
   private double longitude;\r
   private double latitude;\r
@@ -60,10 +75,243 @@ public class NMEAListener implements NmeaListener, LocationListener {
   }\r
   \r
   public void onLocationChanged(Location paramLocation) {}\r
-  \r
-  public void onNmeaReceived(long paramLong, String paramString) {\r
+  static int satindex=0;\r
+  public void onNmeaReceived(long paramLong, String nmeastr) {\r
 //    EqcAlgorithmNative.native_EqcAlgorithmMethod5(paramString);\r
-    ICLogger.i("Nmea :"+paramString+" "+paramLong);\r
+//    ICLogger.i("Nmea :"+nmeastr+" "+paramLong);\r
+\r
+    if (Config.LOG_TOFILE) FileOutputUtil.fileOutput(this.runtime.getCacheDir(),"Nmea","Nmea :"+nmeastr+" "+paramLong);\r
+\r
+    searchCout++;\r
+\r
+\r
+    if (nmeastr.startsWith("$GPGLL,")){\r
+      String tmplist[]=nmeastr.split(",");\r
+//      GPGLL编辑\r
+//(地理定位信息)\r
+//      例:$GPGLL,4250.5589,S,14718.5084,E,092204.999,A*2D\r
+//      字段0:$GPGLL,语句ID,表明该语句为Geographic Position(GLL)地理定位信息\r
+//      字段1:纬度ddmm.mmmm,度分格式(前导位数不足则补0)\r
+//      字段2:纬度N(北纬)或S(南纬)\r
+//      字段3:经度dddmm.mmmm,度分格式(前导位数不足则补0)\r
+//      字段4:经度E(东经)或W(西经)\r
+//      字段5:UTC时间,hhmmss.sss格式\r
+//      字段6:状态,A=定位,V=未定位\r
+//      字段7:校验值($与*之间的数异或后的值)\r
+      String Lat=tmplist[1];\r
+      String lon=tmplist[3];\r
+      String fixed=tmplist[6];\r
+      ICLogger.i("GPGLL Lat="+Lat+",Lon="+lon+",fixed="+fixed);\r
+\r
+    }else if (nmeastr.startsWith("$GPRMC,")) {\r
+//      GPRMC编辑\r
+//(推荐定位信息数据格式)\r
+//      例:$GPRMC,024813.640,A,3158.4608,N,11848.3737,E,10.05,324.27,150706,,,A*50\r
+//      字段0:$GPRMC,语句ID,表明该语句为Recommended Minimum Specific GPS/TRANSIT Data(RMC)推荐最小定位信息\r
+//      字段1:UTC时间,hhmmss.sss格式\r
+//      字段2:状态,A=定位,V=未定位\r
+//      字段3:纬度ddmm.mmmm,度分格式(前导位数不足则补0)\r
+//      字段4:纬度N(北纬)或S(南纬)\r
+//      字段5:经度dddmm.mmmm,度分格式(前导位数不足则补0)\r
+//      字段6:经度E(东经)或W(西经)\r
+//      字段7:速度,节,Knots\r
+//      字段8:方位角,度\r
+//      字段9:UTC日期,DDMMYY格式\r
+//      字段10:磁偏角,(000 - 180)度(前导位数不足则补0)\r
+//      字段11:磁偏角方向,E=东W=西\r
+//      字段12:模式,A=自动,D=差分,E=估测,N=数据无效(3.0协议内容)\r
+//      字段13:校验值($与*之间的数异或后的值)\r
+      String tmplist[]=nmeastr.split(",");\r
+      String utctime=tmplist[1];\r
+      String Lat=tmplist[3];\r
+      String lon=tmplist[5];\r
+      String fixed=tmplist[2];\r
+      String speed=tmplist[7];\r
+      ICLogger.i("GPRMC GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed+",speed="+speed);\r
+      if (Config.LOG_TOFILE)\r
+        FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "GPS", "GPRMC GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed+",speed="+speed);\r
+\r
+      StringBuilder sb=new StringBuilder();\r
+\r
+      //定位了,\r
+      if (fixed.equals("A")) {\r
+        locationFixedCount++;\r
+\r
+        sb.append(", location time= " + TimeUtil.getLocalTime() + " ,lon= " + lon + ", lat= " + Lat + " FixedCount=" + locationFixedCount + ", speed=" + speed);\r
+        ICLogger.i(sb.toString());\r
+        if (Config.LOG_TOFILE)\r
+          FileOutputUtil.fileOutput(this.runtime.getCacheDir(), "GPS", sb.toString());\r
+\r
+        if (speed.trim().isEmpty())speed="0.0";\r
+        runtime.getLocationInstance().setLocation(latitude, longitude,Double.valueOf(speed), 0, numSatelliteList.size());\r
+        if (locationFixedCount > MaxFixedTimes) {\r
+               /*\r
+                只有当前GPS已经定位,且location不为空才给 runtime赋值GPS坐标。\r
+                延迟MaxFixedTimes秒后才设置runtime的定位标志,以便稳定坐标值。\r
+              */\r
+          runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_FIXED);\r
+          ICLogger.i("定位"+locationFixedCount+"次 > "+MaxFixedTimes+", set LOCATION_FIXED ");\r
+          if (!noStop) {\r
+            stopListen();\r
+          }\r
+        }\r
+      }\r
+\r
+    }else if (nmeastr.startsWith("$GPGSV,")) {\r
+\r
+//    GPGSV编辑\r
+//            (可见卫星信息)\r
+//    例:$GPGSV,3,1,10,20,78,331,45,01,59,235,47,22,41,069,,13,32,252,45*70\r
+//    字段0:$GPGSV,语句ID,表明该语句为GPS Satellites in View(GSV)可见卫星信息\r
+//    字段1:本次GSV语句的总数目(1 - 3)\r
+//    字段2:本条GSV语句是本次GSV语句的第几条(1 - 3)\r
+//    字段3:当前可见卫星总数(00 - 12)(前导位数不足则补0)\r
+//    字段4:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)\r
+//    字段5:卫星仰角(00 - 90)度(前导位数不足则补0)\r
+//    字段6:卫星方位角(00 - 359)度(前导位数不足则补0)\r
+//    字段7:信噪比(00-99)dbHz\r
+//    字段8:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)\r
+//    字段9:卫星仰角(00 - 90)度(前导位数不足则补0)\r
+//    字段10:卫星方位角(00 - 359)度(前导位数不足则补0)\r
+//    字段11:信噪比(00-99)dbHz\r
+//    字段12:PRN 码(伪随机噪声码)(01 - 32)(前导位数不足则补0)\r
+//    字段13:卫星仰角(00 - 90)度(前导位数不足则补0)\r
+////    字段14:卫星方位角(00 - 359)度(前导位数不足则补0)\r
+////    字段15:信噪比(00-99)dbHz\r
+//    字段16:校验值($与*之间的数异或后的值)\r
+\r
+      String tmplist[]=nmeastr.split(",");\r
+      int maxPageCount=Integer.valueOf(tmplist[1]);\r
+      int currentPage=Integer.valueOf(tmplist[2]);\r
+      int SatlitesCount=Integer.valueOf(tmplist[3]);\r
+      if (maxPageCount>0 && currentPage==1){\r
+        //第一页把数组初始化一遍。\r
+        satindex=0;\r
+        numSatelliteList.clear(); //清除 SNR >0的卫星\r
+        max3Satellite.clear(); //清除 最大3个星值\r
+      }\r
+      int satcount=(tmplist.length-4)/4;\r
+      ICLogger.i("Nmea :"+nmeastr+" "+satcount);\r
+      for (int i=0;i<satcount;i++){\r
+        satindex++;\r
+        String prn=tmplist[i*4+4];\r
+        String snr=tmplist[i*4+4+3];\r
+        if (snr.contains("*")){\r
+          snr=snr.substring(0,snr.indexOf("*"));\r
+        }\r
+        if (snr.trim().isEmpty()){\r
+          snr="0";\r
+         }\r
+        ICLogger.i("Sat="+satindex+",prn="+prn+",snr="+snr);\r
+\r
+        int intprn=Integer.valueOf(prn);\r
+        float floatsnr=Float.valueOf(snr);\r
+        if (floatsnr>0) {\r
+          //排序取得最大3个SNR\r
+          get3MaxSnrSatellite(new GpsSatellitePriv(intprn, floatsnr));\r
+          numSatelliteList.add(new GpsSatellitePriv(intprn, floatsnr));\r
+        }\r
+      }\r
+      if (maxPageCount==currentPage) {\r
+        //最后一页,打印搜星情况,并作一些判断。\r
+        StringBuilder sb=new StringBuilder();\r
+        sb.append("搜索"+searchCout+"次,搜索到卫星个数" + SatlitesCount+", [SNR>0] ="+numSatelliteList.size());\r
+        sb.append(", Max 3 SNR [");\r
+        for (int i=0;i<max3Satellite.size();i++){\r
+          sb.append(max3Satellite.get(i).getSnr()+",");\r
+        }\r
+        sb.append("]");\r
+        if (Config.LOG_TOFILE)\r
+          FileOutputUtil.fileOutput(this.runtime.getCacheDir(),"GPS",sb.toString());\r
+        ICLogger.i( sb.toString());\r
+\r
+        // 卫星总数小于2 ,或者 snr小于20\r
+        if (numSatelliteList.size()< 3 && (max3Satellite.size()>0?(max3Satellite.get(0).getSnr()<20?true:false) : true)){\r
+          noSignalCount++;\r
+        }\r
+\r
+\r
+        StringBuilder sb2=new StringBuilder();\r
+        if(!noStop) {\r
+          if (searchCout > SearchTimeout) {\r
+            sb2.append(" 搜索" + searchCout + "次未定位,超过" + SearchTimeout + "限制退出GPS定位");\r
+\r
+            runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);\r
+\r
+            stop(MSG_WHAT_GPS_TIMEOUT);\r
+          }\r
+          if (noSignalCount > 10) {\r
+            sb2.append(" 搜索" + searchCout + "次,超过" + noSignalCount + "次没有收到星,退出GPS定位");\r
+            runtime.getLocationInstance().setLocationStat(ICLocation.LOCATION_STAT.LOCATION_GPS_TIEMOUT);\r
+            stop(MSG_WHAT_GPS_NOSTAR);\r
+          }\r
+        }\r
+        if (Config.LOG_TOFILE)\r
+          FileOutputUtil.fileOutput(this.runtime.getCacheDir(),"GPS",sb2.toString());\r
+\r
+\r
+      }\r
+    }else if (nmeastr.startsWith("$GPGGA,")) {\r
+\r
+//    GPGGA编辑\r
+//(定位信息)\r
+//    例:$GPGGA,092204.999,4250.5589,S,14718.5084,E,1,04,24.4,12.2,M,19.7,M,,0000*1F\r
+//    字段0:$GPGGA,语句ID,表明该语句为Global Positioning System Fix Data(GGA)GPS定位信息\r
+//    字段1:UTC 时间,hhmmss.sss,时分秒格式\r
+//    字段2:纬度ddmm.mmmm,度分格式(前导位数不足则补0)\r
+//    字段3:纬度N(北纬)或S(南纬)\r
+//    字段4:经度dddmm.mmmm,度分格式(前导位数不足则补0)\r
+//    字段5:经度E(东经)或W(西经)\r
+//    字段6:GPS状态,0=不可用(FIX NOT valid),1=单点定位(GPS FIX),2=差分定位(DGPS),3=无效PPS,4=实时差分定位(RTK FIX),5=RTK FLOAT,6=正在估算\r
+//    字段7:正在使用的卫星数量(00 - 12)(前导位数不足则补0)\r
+//    字段8:HDOP水平精度因子(0.5 - 99.9)\r
+//    字段9:海拔高度(-9999.9 - 99999.9)\r
+//    字段10:单位:M(米)\r
+//    字段11:地球椭球面相对大地水准面的高度 WGS84水准面划分\r
+//    字段12:WGS84水准面划分单位:M(米)\r
+//    字段13:差分时间(从接收到差分信号开始的秒数,如果不是差分定位将为空)\r
+//    字段14:差分站ID号0000 - 1023(前导位数不足则补0,如果不是差分定位将为空)\r
+//    字段15:校验值($与*之间的数异或后的值)\r
+\r
+      String tmplist[]=nmeastr.split(",");\r
+      String utctime=tmplist[1];\r
+      String Lat=tmplist[2];\r
+      String lon=tmplist[4];\r
+      String fixed=tmplist[6];\r
+//      ICLogger.i("GPGGA GPSTime="+utctime+",Lat="+Lat+",Lon="+lon+",fixed="+fixed);\r
+\r
+\r
+    }else if (nmeastr.startsWith("$GPGSA,")) {\r
+\r
+//    GPGSA编辑\r
+//( 当前卫星信息)\r
+//    例:$GPGSA,A,3,01,20,19,13,,,,,,,,,40.4,24.4,32.2*0A\r
+//    字段0:$GPGSA,语句ID,表明该语句为GPS DOP and Active Satellites(GSA)当前卫星信息\r
+//    字段1:定位模式(选择2D/3D),A=自动选择,M=手动选择\r
+//    字段2:定位类型,1=未定位,2=2D定位,3=3D定位\r
+//    字段3:PRN码(伪随机噪声码),第1信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段4:PRN码(伪随机噪声码),第2信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段5:PRN码(伪随机噪声码),第3信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段6:PRN码(伪随机噪声码),第4信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段7:PRN码(伪随机噪声码),第5信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段8:PRN码(伪随机噪声码),第6信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段9:PRN码(伪随机噪声码),第7信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段10:PRN码(伪随机噪声码),第8信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段11:PRN码(伪随机噪声码),第9信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段12:PRN码(伪随机噪声码),第10信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段13:PRN码(伪随机噪声码),第11信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段14:PRN码(伪随机噪声码),第12信道正在使用的卫星PRN码编号(00)(前导位数不足则补0)\r
+//    字段15:PDOP综合位置精度因子(0.5 - 99.9)\r
+//    字段16:HDOP水平精度因子(0.5 - 99.9)\r
+//    字段17:VDOP垂直精度因子(0.5 - 99.9)\r
+//    字段18:校验值($与*之间的数异或后的值)\r
+\r
+      String tmplist[]=nmeastr.split(",");\r
+      String locationmod=tmplist[1];\r
+      String fixed=tmplist[2];\r
+//      ICLogger.i("GPGSA locationMode="+locationmod+",fixed="+fixed);\r
+\r
+    }\r
   }\r
   \r
   public void onProviderDisabled(String paramString) {}\r
@@ -90,7 +338,6 @@ public class NMEAListener implements NmeaListener, LocationListener {
     locationManager.sendExtraCommand("gps", "force_xtra_injection", bundleWarm); //command\r
     locationManager.sendExtraCommand("gps", "force_time_injection", bundleWarm);\r
     boolean b2 = locationManager.sendExtraCommand("gps", "delete_aiding_data", bundleWarm);\r
-\r
     return b2;\r
   }\r
 \r
@@ -121,7 +368,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
 //          定位算通过\r
             gpsMode = GPS_CURRENT_STATUS.GPS_FIXED;\r
 \r
-\r
+      ICLogger.i("GPS_EVENT_FIRST_FIX !");\r
          //  delaystop();\r
 \r
           break;\r
@@ -180,7 +427,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
       return true;\r
     }\r
   });\r
-  private void get3MaxSnrSatellite(GpsSatellite gst){\r
+  private void get3MaxSnrSatellite(GpsSatellitePriv gst){\r
 \r
     float snr = gst.getSnr();\r
     for (int k=0;k<max3Satellite.size();k++) {\r
@@ -193,7 +440,7 @@ public class NMEAListener implements NmeaListener, LocationListener {
     for(int i=0;i<max3Satellite.size();i++) {\r
       for (int j=i;j<max3Satellite.size();j++) {\r
         if (max3Satellite.get(i).getSnr() < max3Satellite.get(j).getSnr()) {\r
-          GpsSatellite ts = max3Satellite.get(j);\r
+          GpsSatellitePriv ts = max3Satellite.get(j);\r
           max3Satellite.remove(j);\r
           max3Satellite.add(i, ts);//大的放前面\r
         }\r
@@ -223,8 +470,8 @@ public class NMEAListener implements NmeaListener, LocationListener {
           strengh = snr;\r
 //                             Toast.makeText(this, "信躁比大于20", Toast.LENGTH_LONG).show();\r
           //排序取得最大3个SNR\r
-          get3MaxSnrSatellite(s);\r
-          numSatelliteList.add(s);\r
+          get3MaxSnrSatellite(new GpsSatellitePriv(s.getPrn(),s.getSnr()));\r
+          numSatelliteList.add(new GpsSatellitePriv(s.getPrn(),s.getSnr()));\r
         }\r
 \r
         count++;\r
@@ -300,8 +547,10 @@ public class NMEAListener implements NmeaListener, LocationListener {
   private void getBestLocation(LocationManager locationManager,GpsStatus status) {\r
     Location location = null;\r
     if (locationManager != null) {\r
+\r
         location = locationManager.getLastKnownLocation(LocationManager.GPS_PROVIDER);\r
         if (location == null) {\r
+          ICLogger.i(" GPS Provider get failed , get Network Provider!");\r
           location = locationManager.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);\r
         }\r
 \r
@@ -400,8 +649,8 @@ public class NMEAListener implements NmeaListener, LocationListener {
       searchCout = 0;\r
       locationFixedCount=0;\r
       gpsMode = GPS_CURRENT_STATUS.GPS_LISTENING;\r
-      locationManager.addGpsStatusListener(statusListener);//监听搜星状态\r
-//    this.locationManager.addNmeaListener(this);\r
+//      locationManager.addGpsStatusListener(statusListener);//监听搜星状态\r
+      locationManager.addNmeaListener(this); //监听NMEA 协议数据。\r
 \r
       //做个热启动\r
       return gpsHotStart();\r
index bfa9c06..dc8d7cf 100644 (file)
@@ -212,7 +212,16 @@ public class Runtime {
   public String IMEI_CID_KEY() { return this.imei_cid_key; }\r
   \r
   public String IMSI() { return this.imsi; }\r
-  \r
+\r
+\r
+  private boolean noTurnOffWifiOnScreenOff=false;\r
+\r
+  public void setNoTurnOffOnScreenOff(boolean bol){\r
+      noTurnOffWifiOnScreenOff=bol;\r
+  }\r
+  public boolean isNoTurnOffWifiOnScreenOff(){\r
+      return noTurnOffWifiOnScreenOff;\r
+  }\r
   public boolean getAntioffStatus() { return this.isNeedAntioff; }\r
   \r
   public String getBattery() { return this.battery; }\r
index e20ee01..1d1bd53 100644 (file)
@@ -455,6 +455,11 @@ public static void sendLocationMSG( String Msg){
     int networkid;\r
     final WifiManager wifiManager = mRuntime.getContextProxy().getWifiManager();\r
     wifiEnabled = wifiManager.isWifiEnabled();\r
+    if (!wifiEnabled)\r
+    {\r
+      //没开就打开wifi\r
+      Util.turnOnWifiForConnect(mRuntime.getContextProxy().context, mRuntime);\r
+    }\r
     if (Util.isConnectWifi(mRuntime.getContextProxy().context)) {\r
       networkid = wifiManager.getConnectionInfo().getNetworkId();\r
       wifiManager.disconnect();\r
@@ -480,6 +485,11 @@ public static void sendLocationMSG( String Msg){
       return;\r
     }\r
 \r
+    if(!wifiEnabled ){\r
+      //原来wifi没开就关闭wifi\r
+      Util.turnOffWifiForSleep(mRuntime.getContextProxy().context, mRuntime);\r
+    }\r
+\r
   }\r
   public void setWakeupAlarm(Runtime paramRuntime) {\r
     AlarmManager alarmManager = (AlarmManager)(paramRuntime.getContextProxy()).context.getSystemService(Context.ALARM_SERVICE);\r
diff --git a/app/src/main/java/com/enqualcomm/support/toolActivity.java b/app/src/main/java/com/enqualcomm/support/toolActivity.java
new file mode 100644 (file)
index 0000000..8aa6af3
--- /dev/null
@@ -0,0 +1,81 @@
+package com.enqualcomm.support;\r
+\r
+import android.content.Intent;\r
+import android.support.v7.app.AppCompatActivity;\r
+import android.os.Bundle;\r
+import android.view.View;\r
+import android.widget.Button;\r
+\r
+import com.enqualcomm.support.utils.SimSignalUtil;\r
+import com.enqualcomm.support.utils.Util;\r
+\r
+public class toolActivity extends AppCompatActivity {\r
+\r
+    @Override\r
+    protected void onCreate(Bundle savedInstanceState) {\r
+        super.onCreate(savedInstanceState);\r
+        setContentView(R.layout.activity_tool);\r
+\r
+        Button btnSim=(Button)findViewById(R.id.btn_simReset);\r
+        Button btnSimReload=(Button)findViewById(R.id.btn_sim2);\r
+        Button btnLogctl=(Button)findViewById(R.id.btn_logctl);\r
+        Button btnmod1=(Button)findViewById(R.id.btn_location1);\r
+        Button btnmod3=(Button)findViewById(R.id.btn_location3);\r
+        Button btnmod530=(Button)findViewById(R.id.btn_location530);\r
+\r
+        btnmod1.setOnClickListener(new View.OnClickListener() {\r
+            @Override\r
+            public void onClick(View view) {\r
+                Intent intent=new Intent();\r
+                intent.putExtra("smsCmd","#setlocation#=1,30#");\r
+                CoreService.getInstance().runtime.getContextProxy().sendBrodcast("com.enqualcomm.support.SMSCMD",intent);\r
+                Util.ShowToast(CoreService.getInstance().runtime,"设置模式1 , 间隔900秒定位。");\r
+            }\r
+        });\r
+\r
+        btnmod3.setOnClickListener(new View.OnClickListener() {\r
+            @Override\r
+            public void onClick(View view) {\r
+                Intent intent=new Intent();\r
+                intent.putExtra("smsCmd","#setlocation#=3,30#");\r
+                CoreService.getInstance().runtime.getContextProxy().sendBrodcast("com.enqualcomm.support.SMSCMD",intent);\r
+                Util.ShowToast(CoreService.getInstance().runtime,"设置模式3 , 间隔60秒定位。");\r
+            }\r
+        });\r
+\r
+        btnmod530.setOnClickListener(new View.OnClickListener() {\r
+            @Override\r
+            public void onClick(View view) {\r
+                Intent intent=new Intent();\r
+                intent.putExtra("smsCmd","#setlocation#=5,30#");\r
+                CoreService.getInstance().runtime.getContextProxy().sendBrodcast("com.enqualcomm.support.SMSCMD",intent);\r
+                Util.ShowToast(CoreService.getInstance().runtime,"设置模式5 , 间隔30秒定位。");\r
+            }\r
+        });\r
+        btnSim.setOnClickListener(new View.OnClickListener() {\r
+            @Override\r
+            public void onClick(View view) {\r
+                SimSignalUtil.send_at_to_onoff_simcard(CoreService.getInstance().runtime);\r
+                Util.ShowToast(CoreService.getInstance().runtime,"Reset SimCard!");\r
+            }\r
+        });\r
+\r
+        btnSimReload.setOnClickListener(new View.OnClickListener() {\r
+            @Override\r
+            public void onClick(View view) {\r
+                SimSignalUtil.send_at_to_reload_simcard(CoreService.getInstance().runtime);\r
+                Util.ShowToast(CoreService.getInstance().runtime,"Reload SimCard!");\r
+\r
+            }\r
+        });\r
+\r
+        btnLogctl.setOnClickListener(new View.OnClickListener() {\r
+            @Override\r
+            public void onClick(View view) {\r
+                Intent intent=new Intent();\r
+                intent.putExtra("smsCmd","#logctl#=upload,SDLogInfo:Android");\r
+                CoreService.getInstance().runtime.getContextProxy().sendBrodcast("com.enqualcomm.support.SMSCMD",intent);\r
+            }\r
+        });\r
+    }\r
+}\r
index 0d011ac..71bcde0 100644 (file)
@@ -184,7 +184,11 @@ public class DeviceInfoUtil {
     arrayList.add("com.enqualcomm.imessage.ui.chat.ChatActivity_");\r
     return arrayList.contains(((ActivityManager.RunningTaskInfo)((ActivityManager)paramContext.getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1).get(0)).topActivity.getClassName());\r
   }\r
-\r
+  public static boolean isFactoryTestTopActivity(Context paramContext) {\r
+    ArrayList<String> arrayList = new ArrayList();\r
+    arrayList.add("mobile.miki");\r
+    return arrayList.contains(((ActivityManager.RunningTaskInfo)((ActivityManager)paramContext.getSystemService(Context.ACTIVITY_SERVICE)).getRunningTasks(1).get(0)).topActivity.getPackageName());\r
+  }\r
 \r
   public static String getDeviceInfo(Runtime runtime){\r
 \r
index 847b0f7..4157b41 100644 (file)
@@ -208,6 +208,15 @@ public class SimSignalUtil {
     ( runtime.getContextProxy()).context.sendBroadcast(intent);\r
     ICLogger.i("send_at_to_update_lbs ");\r
   }\r
+\r
+  public static void send_at_to_reload_simcard(Runtime runtime){\r
+\r
+    Intent intent = new Intent("com.eqc.intent.action.getTelephony.lbs");\r
+    intent.putExtra("command", "AT+SFUN=3"); //重新初始化sim卡\r
+    intent.putExtra("arg2", "");\r
+    ( runtime.getContextProxy()).context.sendBroadcast(intent);\r
+    ICLogger.i("send_at_to_update_lbs ");\r
+  }\r
   public static void send_at_to_update_lbs(Runtime runtime) {\r
     Intent intent = new Intent("com.eqc.intent.action.getTelephony.lbs");\r
     intent.putExtra("command", "AT+CREG=2");\r
index 0e165ea..392c975 100644 (file)
@@ -10,6 +10,9 @@ import android.net.NetworkInfo;
 import android.net.wifi.WifiConfiguration;\r
 import android.net.wifi.WifiManager;\r
 import android.os.Build;\r
+import android.os.Handler;\r
+import android.os.Looper;\r
+import android.widget.Toast;\r
 \r
 \r
 import java.io.BufferedInputStream;\r
@@ -606,7 +609,23 @@ public class Util {
   public static boolean isWifiIsOpen(Context paramContext, Runtime paramRuntime) {\r
     return paramRuntime.getContextProxy().getWifiManager().isWifiEnabled();\r
   }\r
-  \r
+  public static void ShowToast(Runtime runtime,String msg) {\r
+    new Thread(new Runnable() {\r
+\r
+      @Override\r
+      public void run() {\r
+        Handler handler = new Handler(Looper.getMainLooper());\r
+        handler.post(new Runnable() {\r
+\r
+          @Override\r
+          public void run() {\r
+            Toast.makeText(runtime.getContextProxy().context, msg, Toast.LENGTH_LONG).show();\r
+          }\r
+        });\r
+      }\r
+    }).start();\r
+  }\r
+\r
   public static byte[] loadFile(File paramFile) {\r
 //    if (paramFile != null && paramFile.exists())\r
 //      try {\r
index 59c8af6..2a1c4c1 100644 (file)
                 android:id="@+id/btnConnect"
                 android:layout_width="80dp"
                 android:layout_height="wrap_content"
-                android:text="ReCon" />
-
-            <ToggleButton
-                android:id="@+id/toggleButton2"
-                android:layout_width="50dp"
-                android:layout_height="wrap_content"
                 android:layout_weight="1"
-                android:text="HR"
-                android:textOff="HROff"
-                android:textOn="HROn" />
+                android:text="ReCon" />
 
-            <ToggleButton
-                android:id="@+id/toggleButton"
-                android:layout_width="50dp"
+            <Button
+                android:id="@+id/btn_tools"
+                android:layout_width="80dp"
                 android:layout_height="wrap_content"
                 android:layout_weight="1"
-                android:text="SIM"
-                android:textOff="SimOff"
-                android:textOn="SimOn" />
+                android:text="Tools" />
         </LinearLayout>
 
         <HorizontalScrollView
diff --git a/app/src/main/res/layout/activity_tool.xml b/app/src/main/res/layout/activity_tool.xml
new file mode 100644 (file)
index 0000000..c262dc6
--- /dev/null
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="utf-8"?>\r
+<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"\r
+    xmlns:app="http://schemas.android.com/apk/res-auto"\r
+    xmlns:tools="http://schemas.android.com/tools"\r
+    android:layout_width="match_parent"\r
+    android:layout_height="match_parent"\r
+    android:orientation="vertical"\r
+    tools:context=".toolActivity">\r
+\r
+    <LinearLayout\r
+        android:layout_width="match_parent"\r
+        android:layout_height="wrap_content"\r
+        android:layout_weight="1"\r
+        android:orientation="horizontal">\r
+\r
+        <Button\r
+            android:id="@+id/btn_logctl"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_weight="1"\r
+            android:text="UploadLog" />\r
+\r
+        <Button\r
+            android:id="@+id/btn_simReset"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_weight="1"\r
+            android:text="SimReset" />\r
+\r
+        <Button\r
+            android:id="@+id/btn_sim2"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_weight="1"\r
+            android:text="SIMRELoad" />\r
+    </LinearLayout>\r
+\r
+    <LinearLayout\r
+        android:layout_width="match_parent"\r
+        android:layout_height="wrap_content"\r
+        android:layout_weight="1"\r
+        android:orientation="horizontal">\r
+\r
+        <Button\r
+            android:id="@+id/btn_location3"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_weight="1"\r
+            android:text="Mode3" />\r
+\r
+        <Button\r
+            android:id="@+id/btn_location530"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_weight="1"\r
+            android:text="Mode5.30" />\r
+\r
+        <Button\r
+            android:id="@+id/btn_location1"\r
+            android:layout_width="wrap_content"\r
+            android:layout_height="wrap_content"\r
+            android:layout_weight="1"\r
+            android:text="Mode1" />\r
+    </LinearLayout>\r
+\r
+</LinearLayout>
\ No newline at end of file