release V490
authorsnickersun <scy@incartech.cn>
Mon, 10 Aug 2020 13:01:53 +0000 (21:01 +0800)
committersnickersun <scy@incartech.cn>
Mon, 10 Aug 2020 13:01:53 +0000 (21:01 +0800)
1、修复短信接收有丢失问题。
2、修复发送短消息类型错误问题
3、heartrate检测关闭代码优化。

app/release/ICSer_V490_2008102058_release.apk [moved from app/release/ICSer_V489_2008101920_release.apk with 79% similarity]
app/release/output.json
app/src/main/java/com/enqualcomm/support/ICSmsManager.java
app/src/main/java/com/enqualcomm/support/service/HeartRateManager.java
app/src/main/java/com/enqualcomm/support/service/SmsDatabaseChaneObserver.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/utils/ContextProxy.java
app/version_code.properties

similarity index 79%
rename from app/release/ICSer_V489_2008101920_release.apk
rename to app/release/ICSer_V490_2008102058_release.apk
index 77075df..fb3f458 100644 (file)
Binary files a/app/release/ICSer_V489_2008101920_release.apk and b/app/release/ICSer_V490_2008102058_release.apk differ
index a6dff38..d30c5b7 100644 (file)
@@ -1 +1 @@
-[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":484,"versionName":"2008081221","enabled":true,"outputFile":"ICSer_V484_2008081221_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V484_2008081221_release.apk","properties":{}}]
\ No newline at end of file
+[{"outputType":{"type":"APK"},"apkData":{"type":"MAIN","splits":[],"versionCode":490,"versionName":"2008102058","enabled":true,"outputFile":"ICSer_V490_2008102058_release.apk","fullName":"release","baseName":"release"},"path":"ICSer_V490_2008102058_release.apk","properties":{}}]
\ No newline at end of file
index 286aa3b..57df41b 100644 (file)
@@ -6,11 +6,15 @@ import android.content.BroadcastReceiver;
 import android.content.ComponentName;\r
 import android.content.ContentResolver;\r
 import android.content.Context;\r
+import android.content.ContextWrapper;\r
 import android.content.Intent;\r
 import android.content.IntentFilter;\r
 import android.database.Cursor;\r
 import android.net.Uri;\r
+import android.os.Bundle;\r
 import android.os.Environment;\r
+import android.os.Handler;\r
+import android.os.Message;\r
 import android.os.SystemClock;\r
 import android.telephony.SmsManager;\r
 import android.telephony.SmsMessage;\r
@@ -20,6 +24,7 @@ import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.ICLocation;\r
 import com.enqualcomm.support.bean.Runtime;\r
 import com.enqualcomm.support.service.Deliver;\r
+import com.enqualcomm.support.service.SmsDatabaseChaneObserver;\r
 import com.enqualcomm.support.utils.APNUtil;\r
 import com.enqualcomm.support.utils.CellInfoUtil;\r
 import com.enqualcomm.support.utils.ContextProxy;\r
@@ -61,7 +66,7 @@ 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  extends BroadcastReceiver{\r
+public class ICSmsManager  extends BroadcastReceiver {\r
 \r
     private static String cell_number_to_reply=""; //this number is use for ACTION_SMSCMD_Reply\r
 \r
@@ -69,6 +74,46 @@ public class ICSmsManager  extends BroadcastReceiver{
     private Context mContext = null;\r
     Runtime runtime;\r
 \r
+    Handler mHandler=new Handler(new Handler.Callback() {\r
+        @Override\r
+        public boolean handleMessage(Message message) {\r
+\r
+            if (message.what==100){\r
+\r
+                Bundle param = message.getData();\r
+                if (param!=null){\r
+\r
+                    String from = param.getString("SMSFrom");\r
+                    String smsmessage = param.getString("SMSData");\r
+\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
+                                ICLogger.i("收到" + from + "短信:" + smsmessage);\r
+//                         Toast.makeText(context, "收到" + from + "短信:" + smsmessage, Toast.LENGTH_LONG).show();\r
+                                if (handleSMS_CMD(from, smsmessage) == false) {\r
+                                    //说明不是sms命令,提示短信接收。\r
+                                    ContextProxy.sendMsgBroadcast(mContext, smsmessage, 1);\r
+                                }\r
+                            }\r
+                        })).start();\r
+//                    }\r
+\r
+\r
+                }\r
+\r
+\r
+            }\r
+\r
+\r
+\r
+            return false;\r
+        }\r
+    });\r
+\r
     ReplayLocation replayLocation=new ReplayLocation();\r
 \r
     @Override\r
@@ -92,7 +137,7 @@ public class ICSmsManager  extends BroadcastReceiver{
             cell_number_to_reply="";\r
         }else if (ACTION_SMS_RECEIVED.equals(action)) {\r
             long currenttime = System.currentTimeMillis();\r
-            if (currenttime - ICSmsManager.preTimeMillis > 30000L) {\r
+//            if (currenttime - ICSmsManager.preTimeMillis > 30000L) {\r
                 ICSmsManager.preTimeMillis = currenttime;\r
                 (new Thread(new Runnable() {\r
                     public void run() {\r
@@ -119,7 +164,7 @@ public class ICSmsManager  extends BroadcastReceiver{
                         }\r
                     }\r
                 })).start();\r
-            }\r
+//            }\r
         }\r
 \r
     }\r
@@ -149,6 +194,7 @@ public class ICSmsManager  extends BroadcastReceiver{
         IntentFilter intentfilter=new IntentFilter();\r
         intentfilter.addAction(ACTION_SMSCMD_Reply);\r
         this.mContext.registerReceiver(this,intentfilter);\r
+//        registerSmsDatabaseChangeObserver(mContext);\r
     }\r
 \r
     public void sendSMS(String phonenumber, String msg) {\r
@@ -1007,5 +1053,22 @@ public class ICSmsManager  extends BroadcastReceiver{
             return false;\r
         }\r
     }\r
+    public final Uri SMS_MESSAGE_URI = Uri.parse("content://sms");\r
+    private SmsDatabaseChaneObserver mSmsDBChangeObserver;\r
+    private void registerSmsDatabaseChangeObserver(Context contextWrapper) {\r
+        //因为,某些机型修改rom导致没有getContentResolver\r
+        try {\r
+            mSmsDBChangeObserver = new SmsDatabaseChaneObserver(contextWrapper.getContentResolver(), mHandler);\r
+            contextWrapper.getContentResolver().registerContentObserver(SMS_MESSAGE_URI, true, mSmsDBChangeObserver);\r
+        } catch (Throwable b) {\r
+        }\r
+    }\r
 \r
+    private void unregisterSmsDatabaseChangeObserver(Context contextWrapper) {\r
+        try {\r
+            contextWrapper.getContentResolver().unregisterContentObserver(mSmsDBChangeObserver);\r
+        } catch (Exception e) {\r
+            e.printStackTrace();\r
+        }\r
+    }\r
 }
\ No newline at end of file
index b1977ee..21afdc8 100644 (file)
@@ -285,10 +285,11 @@ public class HeartRateManager extends AbstractInvokeHandlerService implements Se
       }else {\r
         timerPPG.shutdownNow();\r
         timerPPG.purge();\r
+        ICJniUtils.disablePPG();\r
       }\r
       isTimerStarted=false;\r
     }\r
-    ICJniUtils.disablePPG();\r
+\r
     releaseWakeLock();\r
   }\r
 \r
diff --git a/app/src/main/java/com/enqualcomm/support/service/SmsDatabaseChaneObserver.java b/app/src/main/java/com/enqualcomm/support/service/SmsDatabaseChaneObserver.java
new file mode 100644 (file)
index 0000000..1ddf59d
--- /dev/null
@@ -0,0 +1,102 @@
+package com.enqualcomm.support.service;\r
+\r
+import android.content.ContentResolver;\r
+import android.database.ContentObserver;\r
+import android.database.Cursor;\r
+import android.net.Uri;\r
+import android.os.Bundle;\r
+import android.os.Handler;\r
+import android.os.Message;\r
+import android.text.TextUtils;\r
+\r
+import com.enqualcomm.support.utils.ICLogger;\r
+\r
+/**\r
+ * 数据库观察者\r
+ */\r
+public class SmsDatabaseChaneObserver extends ContentObserver {\r
+    // 只检查收件箱\r
+    public static final Uri MMSSMS_ALL_MESSAGE_URI = Uri.parse("content://sms/inbox");\r
+    public static final String SORT_FIELD_STRING = "_id asc";  // 排序\r
+    public static final String DB_FIELD_ID = "_id";\r
+    public static final String DB_FIELD_ADDRESS = "address";\r
+    public static final String DB_FIELD_PERSON = "person";\r
+    public static final String DB_FIELD_BODY = "body";\r
+    public static final String DB_FIELD_DATE = "date";\r
+    public static final String DB_FIELD_TYPE = "type";\r
+    public static final String DB_FIELD_THREAD_ID = "thread_id";\r
+    public static final String[] ALL_DB_FIELD_NAME = {\r
+            DB_FIELD_ID, DB_FIELD_ADDRESS, DB_FIELD_PERSON, DB_FIELD_BODY,\r
+            DB_FIELD_DATE, DB_FIELD_TYPE, DB_FIELD_THREAD_ID };\r
+    public static int mMessageCount = -1;\r
+\r
+    private static final long DELTA_TIME = 60 * 1000;\r
+    private ContentResolver mResolver;\r
+\r
+    private Handler mHandler=null;\r
+    public SmsDatabaseChaneObserver(ContentResolver resolver, Handler handler) {\r
+        super(handler);\r
+        mHandler=handler;\r
+        mResolver = resolver;\r
+    }\r
+\r
+    @Override\r
+    public void onChange(boolean selfChange) {\r
+        onReceiveSms();\r
+    }\r
+\r
+    private void onReceiveSms() {\r
+        Cursor cursor = null;\r
+        // 添加异常捕捉\r
+        try {\r
+            cursor = mResolver.query(MMSSMS_ALL_MESSAGE_URI, ALL_DB_FIELD_NAME,\r
+                    null, null, SORT_FIELD_STRING);\r
+            final int count = cursor.getCount();\r
+            if (count <= mMessageCount) {\r
+                mMessageCount = count;\r
+                return;\r
+            }\r
+            // 发现收件箱的短信总数目比之前大就认为是刚接收到新短信---如果出现意外,请神保佑\r
+            // 同时认为id最大的那条记录为刚刚新加入的短信的id---这个大多数是这样的,发现不一样的情况的时候可能也要求神保佑了\r
+            mMessageCount = count;\r
+            if (cursor != null) {\r
+                cursor.moveToLast();\r
+                final long smsdate = Long.parseLong(cursor.getString(cursor.getColumnIndex(DB_FIELD_DATE)));\r
+                final long nowdate = System.currentTimeMillis();\r
+                // 如果当前时间和短信时间间隔超过60秒,认为这条短信无效\r
+                if (nowdate - smsdate > DELTA_TIME) {\r
+                    return;\r
+                }\r
+                final String strAddress = cursor.getString(cursor.getColumnIndex(DB_FIELD_ADDRESS));    // 短信号码\r
+                final String strbody = cursor.getString(cursor.getColumnIndex(DB_FIELD_BODY));          // 在这里获取短信信息\r
+                final int smsid = cursor.getInt(cursor.getColumnIndex(DB_FIELD_ID));\r
+                if (TextUtils.isEmpty(strAddress) || TextUtils.isEmpty(strbody)) {\r
+                    return;\r
+                }\r
+                // 得到短信号码和内容之后进行相关处理\r
+                if(mHandler!=null) {\r
+                    Message msg=new Message();\r
+                    Bundle msgdata=new Bundle();\r
+                    msgdata.putString("SMSFrom",strAddress);\r
+                    msgdata.putString("SMSData",strbody);\r
+                    msg.what=100;\r
+                    msg.setData(msgdata);\r
+                    mHandler.sendMessage(msg);\r
+\r
+                }\r
+                ICLogger.i("Database 收到" + strAddress + "短信:" + strbody);\r
+\r
+            }\r
+        } catch (Exception e) {\r
+            e.printStackTrace();\r
+        } finally {\r
+            if (cursor != null) {\r
+                try {  // 有可能cursor都没有创建成功\r
+                    cursor.close();\r
+                } catch (Exception e) {\r
+                    e.printStackTrace();\r
+                }\r
+            }\r
+        }\r
+    }\r
+}
\ No newline at end of file
index 50f0be1..f573be1 100644 (file)
@@ -381,7 +381,7 @@ public class ContextProxy {
           }\r
 \r
           Intent intent = new Intent("action.ic.srvPushTxt");\r
-          intent.putExtra("msgType", 0); //0 代表 server下发消息,1代表 SMS消息\r
+          intent.putExtra("msgType", 1); //0 代表 server下发消息,1代表 SMS消息\r
           intent.putExtra("txtMsg", msg);\r
           intent.addFlags(FLAG_ACTIVITY_NEW_TASK);\r
           _context.sendBroadcast(intent);\r
index ec3daae..5b46e50 100644 (file)
@@ -1,2 +1,2 @@
-#Mon Aug 10 19:20:04 CST 2020\r
-VERSION_CODE=489\r
+#Mon Aug 10 20:58:05 CST 2020\r
+VERSION_CODE=490\r