1、把短信接收的action注册 改为静态注册,减少信息丢失的可能性。
authorsnickersun <scy@incartech.cn>
Sat, 18 Jul 2020 07:12:55 +0000 (15:12 +0800)
committersnickersun <scy@incartech.cn>
Sat, 18 Jul 2020 07:12:55 +0000 (15:12 +0800)
2、修改NettyConnection 提前记录日志,减少由于发送错误造成的日志无法记录的问题。

app/app.iml
app/src/main/AndroidManifest.xml
app/src/main/java/com/enqualcomm/support/Constants.java
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/utils/NettyConnection.java

index 586ced2..cda70e3 100644 (file)
     <orderEntry type="module" module-name="dNSCache"/>\r
     <orderEntry type="module" module-name="dNSCache"/>\r
     <orderEntry type="module" module-name="dNSCache"/>\r
+    <orderEntry type="module" module-name="dNSCache"/>\r
     <orderEntry type="jdk" jdkName="Android API 25 Platform" jdkType="Android SDK"/>\r
   </component>\r
 </module>\r
index a14fc12..6321e58 100644 (file)
             android:authorities="com.enqualcomm.support"
             android:exported="true" />
 
+        <receiver
+            android:name=".ICSmsManager"
+            android:exported="true">
+            <intent-filter>
+                <action android:name="android.provider.Telephony.SMS_RECEIVED" />
+                <action android:name="com.ic.action.startfotaUpdate" />
+                <action android:name="com.ic.action.fotaUpdateReply" />
+            </intent-filter>
+        </receiver>
         <receiver
             android:name=".BootCompleteReceiver"
             android:exported="true">
index 22bb347..9466980 100644 (file)
@@ -218,7 +218,8 @@ public interface Constants {
 \r
 \r
   public static final int NEW_MEDIA_PUSH = 100;\r
-  \r
+\r
+  public static final String ACTION_SMS_RECEIVED = "android.provider.Telephony.SMS_RECEIVED";\r
   public static final String OTHER_ALARM_END = "com.enqualcomm.support.OTHER_ALARM_END";\r
   \r
   public static final String OTHER_ALARM_START = "com.enqualcomm.support.OTHER_ALARM_START";\r
@@ -240,7 +241,13 @@ public interface Constants {
   public static final String RESTORE_EXTRA_WIPE_EXTERNAL_STORAGE = "android.intent.extra.WIPE_EXTERNAL_STORAGE";\r
   \r
   public static final String RESTORE_REASON = "android.intent.extra.REASON";\r
-  \r
+\r
+\r
+  public static final  String ACTION_START_FOTA_UPDATE="com.ic.action.startfotaUpdate";\r
+  public static final String ACTION_SMSCMD="com.enqualcomm.support.SMSCMD";\r
+  public static final String ACTION_SMSCMD_Reply="com.ic.action.fotaUpdateReply";\r
+  public static final String KeyReplyData="reply";\r
+\r
   public static final int RESULT_ERROR = 500;\r
   \r
   public static final int RESULT_OK = 200;\r
index 70795ce..10e6405 100644 (file)
@@ -1110,7 +1110,6 @@ public class CoreService extends Service {
         unregisterReceiver(this.screenOnReceiver);\r
         unregisterReceiver(this.AtCallbackBroadcastReceiver);\r
         batteryUtil.unregisterBroadReceiver();\r
-        smsManager.unregisterBroadReceiver();\r
 \r
     }\r
 \r
index b71917b..654f5c2 100644 (file)
@@ -44,7 +44,12 @@ import rx.Observable;
 import rx.functions.Action1;\r
 \r
 import static com.enqualcomm.support.Config.upload_logs_via_ftp;\r
+import static com.enqualcomm.support.Constants.ACTION_SMSCMD;\r
+import static com.enqualcomm.support.Constants.ACTION_SMSCMD_Reply;\r
+import static com.enqualcomm.support.Constants.ACTION_SMS_RECEIVED;\r
+import static com.enqualcomm.support.Constants.ACTION_START_FOTA_UPDATE;\r
 import static com.enqualcomm.support.Constants.DIALOG_ACTION;\r
+import static com.enqualcomm.support.Constants.KeyReplyData;\r
 import static com.enqualcomm.support.Constants.contact;\r
 import static com.enqualcomm.support.utils.DeviceInfoUtil.getDeviceVersion;\r
 import static com.enqualcomm.support.utils.SimSignalUtil.send_at_cmd;\r
@@ -52,18 +57,62 @@ import static com.enqualcomm.support.utils.SimSignalUtil.send_at_setImei0;
 import static com.enqualcomm.support.utils.SimSignalUtil.send_at_setImei1;\r
 \r
 \r
-public class ICSmsManager {\r
-    private static String ACTION_SMSCMD="com.enqualcomm.support.SMSCMD";\r
-    private static String ACTION_SMSCMD_Reply="com.ic.action.fotaUpdateReply";\r
-    private static String KeyReplyData="reply";\r
+public class ICSmsManager  extends BroadcastReceiver{\r
+\r
     private static String cell_number_to_reply=""; //this number is use for ACTION_SMSCMD_Reply\r
-    private static String ACTION_START_FOTA_UPDATE="com.ic.action.startfotaUpdate";\r
+\r
     private static long preTimeMillis;\r
     private Context mContext = null;\r
     Runtime runtime;\r
-    ICSmsManager.SmsReceiver smsReceiver;\r
 \r
     ReplayLocation replayLocation=new ReplayLocation();\r
+\r
+    @Override\r
+    public void onReceive(Context context, Intent intent) {\r
+\r
+\r
+        String action = intent.getAction();\r
+        if (ACTION_SMSCMD.equals(action)) {\r
+            String cmd = intent.getStringExtra("smsCmd");\r
+            handleSMS_CMD("", cmd);\r
+        }else if (ACTION_SMSCMD_Reply.equals(action)){\r
+            String replydata=intent.getStringExtra(KeyReplyData);\r
+            sendSMS(cell_number_to_reply,replydata);\r
+            cell_number_to_reply="";\r
+        }else if (ACTION_SMS_RECEIVED.equals(action)) {\r
+            long currenttime = System.currentTimeMillis();\r
+            if (currenttime - ICSmsManager.preTimeMillis > 30000L) {\r
+                ICSmsManager.preTimeMillis = currenttime;\r
+                (new Thread(new Runnable() {\r
+                    public void run() {\r
+                        SystemClock.sleep(3000L);\r
+                        if (intent == null || intent.getAction() == null) return;\r
+\r
+                        //长短信会被分拆送来,因此可能会有多个PDU。Protocol Description Unit是短信的工业标准。 \r
+                        Object[] pduArray = (Object[]) intent.getExtras().get("pdus");\r
+                        ICLogger.i("pdu number=" + pduArray.length);\r
+                        String message = "";\r
+                        String from = null;\r
+                        for (int i = 0; i < pduArray.length; i++) {\r
+                            SmsMessage sms = SmsMessage.createFromPdu((byte[]) pduArray[i]);//将PDU转换为SmsMessage格式\r
+                            ICLogger.i("From : " + sms.getDisplayOriginatingAddress());\r
+                            ICLogger.i("SMS : " + sms.getDisplayMessageBody());\r
+                            from = sms.getDisplayOriginatingAddress();\r
+                            message += sms.getDisplayMessageBody();\r
+                        }\r
+                        ICLogger.i("收到" + from + "短信:" + message);\r
+//                         Toast.makeText(context, "收到" + from + "短信:" + message, Toast.LENGTH_LONG).show();\r
+                        if (handleSMS_CMD(from, message) == false) {\r
+                            //说明不是sms命令,提示短信接收。\r
+                            ContextProxy.sendMsgBroadcast(context, message, 1);\r
+                        }\r
+                    }\r
+                })).start();\r
+            }\r
+        }\r
+\r
+    }\r
+\r
     public class ReplayLocation implements LocationClient.LocationResponseUrl {\r
 \r
         @Override\r
@@ -82,9 +131,6 @@ public class ICSmsManager {
     public ICSmsManager( Runtime _runtime) {\r
         this.runtime = _runtime;\r
         this.mContext = runtime.getContextProxy().context;\r
-        this.smsReceiver = new ICSmsManager.SmsReceiver();\r
-\r
-        registerBroadReceiver();\r
     }\r
 \r
     public void sendSMS(String phonenumber, String msg) {\r
@@ -112,38 +158,8 @@ public class ICSmsManager {
         context.sendBroadcast(intent);\r
 \r
     }\r
-    public void registerBroadReceiver() {\r
-\r
-        IntentFilter intentFilter = new IntentFilter();\r
-        intentFilter.addAction("android.provider.Telephony.SMS_RECEIVED");\r
-        intentFilter.setPriority(2147483647);\r
-        this.mContext.registerReceiver(this.smsReceiver, intentFilter);\r
-\r
-        intentFilter = new IntentFilter();\r
-        intentFilter.addAction(ACTION_SMSCMD);\r
-        intentFilter.addAction(ACTION_SMSCMD_Reply);\r
-        (this.runtime.getContextProxy()).context.registerReceiver(this.mSMSCMD_BroadcastReceiver, intentFilter);\r
-    }\r
 \r
-    public void unregisterBroadReceiver() {\r
-        (this.runtime.getContextProxy()).context.unregisterReceiver(this.mSMSCMD_BroadcastReceiver);\r
-        (this.runtime.getContextProxy()).context.unregisterReceiver(this.smsReceiver);\r
-    }\r
 \r
-    private final BroadcastReceiver mSMSCMD_BroadcastReceiver = new BroadcastReceiver() {\r
-        @Override\r
-        public void onReceive(Context context, Intent intent) {\r
-            String action = intent.getAction();\r
-            if (ACTION_SMSCMD.equals(action)) {\r
-                String cmd = intent.getStringExtra("smsCmd");\r
-                handleSMS_CMD("", cmd);\r
-            }else if (ACTION_SMSCMD_Reply.equals(action)){\r
-                String replydata=intent.getStringExtra(KeyReplyData);\r
-                sendSMS(cell_number_to_reply,replydata);\r
-                cell_number_to_reply="";\r
-            }\r
-        }\r
-    };\r
     //1:短信设置服务器\r
     //#ip#=198.11.183.28,5088#\r
     //回复 ip set ok\r
@@ -887,35 +903,6 @@ public class ICSmsManager {
         }\r
 \r
         public void onReceive(Context context, Intent intent) {\r
-            long currenttime = System.currentTimeMillis();\r
-            if (currenttime - ICSmsManager.preTimeMillis > 30000L) {\r
-                ICSmsManager.preTimeMillis = currenttime;\r
-                (new Thread(new Runnable() {\r
-                    public void run() {\r
-                        SystemClock.sleep(3000L);\r
-                        if(intent == null || intent.getAction() == null ) return;\r
-\r
-                         //长短信会被分拆送来,因此可能会有多个PDU。Protocol Description Unit是短信的工业标准。 \r
-                         Object[] pduArray = (Object[])intent.getExtras().get("pdus");\r
-                         ICLogger.i("pdu number=" + pduArray.length);\r
-                         String message = "";\r
-                         String from = null;\r
-                         for(int i = 0 ; i < pduArray.length; i ++){\r
-                         SmsMessage sms = SmsMessage.createFromPdu((byte[])pduArray[i]);//将PDU转换为SmsMessage格式\r
-                             ICLogger.i("From : " + sms.getDisplayOriginatingAddress());\r
-                             ICLogger.i("SMS : " + sms.getDisplayMessageBody());\r
-                                from = sms.getDisplayOriginatingAddress();\r
-                                message += sms.getDisplayMessageBody();\r
-                         }\r
-                        ICLogger.i("收到" + from + "短信:" + message);\r
-//                         Toast.makeText(context, "收到" + from + "短信:" + message, Toast.LENGTH_LONG).show();\r
-                        if (handleSMS_CMD(from,message)==false){\r
-                            //说明不是sms命令,提示短信接收。\r
-                            ContextProxy.sendMsgBroadcast(context,message,1);\r
-                        }\r
-                    }\r
-                })).start();\r
-            }\r
 \r
         }\r
 \r
index 34c4969..cfae092 100644 (file)
@@ -125,11 +125,6 @@ public class NettyConnection implements Connection {
     ICLogger.log(TAG,msg);\r
   }\r
 \r
-  private void log(String funcName, String msg) {\r
-    ICLogger.log(TAG,funcName,msg);\r
-  }\r
-\r
-\r
 \r
   public boolean isServerConnected(){\r
     return (RxSocket.getInstance().getSocketStatus()== CONNECTED)?true:false;\r
@@ -150,6 +145,7 @@ public class NettyConnection implements Connection {
         return false;\r
     }else{\r
         log("send  "+cmd);\r
+        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog"," sent " + cmd);\r
         //向RxSocket写数据\r
         //示例数据:IWAP00867155030001063#\r
         byte[] test = cmd.getBytes();\r
@@ -167,7 +163,6 @@ public class NettyConnection implements Connection {
                         }\r
                 );\r
 \r
-        if (Config.LOG_TOFILE) ICLogger.logToFile("APILog"," sent " + cmd);\r
 \r
     }\r
 \r
@@ -188,6 +183,7 @@ public class NettyConnection implements Connection {
             return false;\r
         }else{\r
             log("sendBytes  "+new String(cmdArray));\r
+            if (Config.LOG_TOFILE) ICLogger.logToFile("APILog"," sentBytes  " + new String(cmdArray));\r
             //向RxSocket写数据\r
             //示例数据:IWAP00867155030001063#\r
             ByteBuffer byteBuffer = ByteBuffer.wrap(cmdArray);\r
@@ -204,7 +200,6 @@ public class NettyConnection implements Connection {
                             }\r
                     );\r
 \r
-            if (Config.LOG_TOFILE) ICLogger.logToFile("APILog"," sentBytes  " + new String(cmdArray));\r
 \r
         }\r
 \r