parse fzd memmbers.
authorTrillGates <williamtrillgates@gmail.com>
Wed, 24 Feb 2021 07:44:16 +0000 (15:44 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Wed, 24 Feb 2021 07:44:16 +0000 (15:44 +0800)
app/src/main/AndroidManifest.xml
app/src/main/java/com/enqualcomm/support/CoreService.java
app/src/main/java/com/enqualcomm/support/provider/FZDDatabaseHelper.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/provider/FZDMembersProvider.java
app/src/main/java/com/enqualcomm/support/provider/MySqlitOpenHelper.java [new file with mode: 0644]
app/src/main/java/com/enqualcomm/support/utils/DBHelper.java
app/src/main/java/com/ic/protocols/protocol_fzd.java

index ae26119..273ab7e 100644 (file)
                 <!-- <action android:name="com.eqc.heartrate.action.SILENT_START" /> -->
             </intent-filter>
         </receiver>
+
+        <provider
+            android:name=".provider.FZDMembersProvider"
+            android:authorities="com.ic.fzd.video-call"
+            android:exported="true" />
     </application>
 
 </manifest>
\ No newline at end of file
index 88d1fba..3550d15 100644 (file)
@@ -1641,6 +1641,7 @@ public class CoreService extends Service {
         if ("com.ic.action.VIDEO_CALL".equals(action)) {
             try {
                 mFZDService.getBRId();
+                mFZDService.getContracts();
             } catch (Exception e) {
                 e.printStackTrace();
             }
diff --git a/app/src/main/java/com/enqualcomm/support/provider/FZDDatabaseHelper.java b/app/src/main/java/com/enqualcomm/support/provider/FZDDatabaseHelper.java
new file mode 100644 (file)
index 0000000..5b1a904
--- /dev/null
@@ -0,0 +1,55 @@
+package com.enqualcomm.support.provider;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+import android.support.annotation.Nullable;
+
+import com.enqualcomm.support.utils.ICLogger;
+
+
+public class FZDDatabaseHelper extends SQLiteOpenHelper {
+
+    public static final String DB_NAME = "fzd_db";
+    private static final int DEFAULT_VERSION = 1;
+
+
+    public FZDDatabaseHelper(@Nullable Context context) {
+        super(context, DB_NAME, null, DEFAULT_VERSION);
+    }
+    //数据库字段需要有:id,user_name,phone_num,create_time,update_time
+
+    public static final String tMembers = "members";
+    public static final String fID = "_id";
+    public static final String fUserName = "user_name";
+    public static final String fPhoneNum = "phone_num";
+    public static final String fCreateTime = "create_time";
+    public static final String fUpdateTime = "update_time";
+
+
+    @Override
+    public void onCreate(SQLiteDatabase db) {
+        //创建数据库
+        String createMembers = "create table " +
+                tMembers +
+                " (" +
+                fID +
+                " integer primary key, " +
+                fUserName +
+                " text, " +
+                fPhoneNum +
+                " text, " +
+                fCreateTime +
+                " date, " +
+                fUpdateTime +
+                " date"
+                + ")";
+        ICLogger.d(createMembers);
+        db.execSQL(createMembers);
+    }
+
+    @Override
+    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
+        //升级数据库
+    }
+}
index d1cad05..1cfb639 100644 (file)
@@ -2,18 +2,46 @@ package com.enqualcomm.support.provider;
 
 import android.content.ContentProvider;
 import android.content.ContentValues;
+import android.content.UriMatcher;
 import android.database.Cursor;
+import android.database.sqlite.SQLiteDatabase;
 import android.net.Uri;
 import android.support.annotation.NonNull;
 import android.support.annotation.Nullable;
 
 public class FZDMembersProvider extends ContentProvider {
 
+    private static UriMatcher sUriMatcher;
+    private static final int MATH_CODE = 1;
+
+    public static final String PATH = "members";
+    public static final String AUTHORITY = "com.ic.fzd.video-call";
+    public static final String MEMBERS = "content://" + AUTHORITY + "/" + PATH;
+
+
+    static {
+        sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+        sUriMatcher.addURI(AUTHORITY, PATH, MATH_CODE);
+    }
+
+    private FZDDatabaseHelper mDatabase;
+
     @Override
     public boolean onCreate() {
+        mDatabase = new FZDDatabaseHelper(getContext());
         return false;
     }
 
+    /**
+     * 查询数据
+     *
+     * @param uri
+     * @param projection
+     * @param selection
+     * @param selectionArgs
+     * @param sortOrder
+     * @return
+     */
     @Nullable
     @Override
     public Cursor query(@NonNull Uri uri,
@@ -21,6 +49,16 @@ public class FZDMembersProvider extends ContentProvider {
                         @Nullable String selection,
                         @Nullable String[] selectionArgs,
                         @Nullable String sortOrder) {
+        //匹配规则
+        int match = sUriMatcher.match(uri);
+        if (match == MATH_CODE) {
+            SQLiteDatabase readableDatabase = mDatabase.getReadableDatabase();
+            return readableDatabase.query(FZDDatabaseHelper.tMembers,
+                    projection,
+                    selection,
+                    selectionArgs,
+                    null, null, sortOrder);
+        }
         return null;
     }
 
@@ -34,6 +72,14 @@ public class FZDMembersProvider extends ContentProvider {
     @Override
     public Uri insert(@NonNull Uri uri,
                       @Nullable ContentValues values) {
+        int match = sUriMatcher.match(uri);
+        if (match == MATH_CODE) {
+            SQLiteDatabase writableDatabase = mDatabase.getWritableDatabase();
+            long insert = writableDatabase.insert(FZDDatabaseHelper.tMembers, null, values);
+            writableDatabase.close();
+            getContext().getContentResolver().notifyChange(uri, null);
+            return Uri.parse(AUTHORITY + "/" + PATH + "/" + insert);
+        }
         return null;
     }
 
@@ -41,6 +87,13 @@ public class FZDMembersProvider extends ContentProvider {
     public int delete(@NonNull Uri uri,
                       @Nullable String selection,
                       @Nullable String[] selectionArgs) {
+        int match = sUriMatcher.match(uri);
+        if (match == MATH_CODE) {
+            SQLiteDatabase writableDatabase = mDatabase.getWritableDatabase();
+            int delete = writableDatabase.delete(FZDDatabaseHelper.tMembers, selection, selectionArgs);
+            writableDatabase.close();
+            return delete;
+        }
         return 0;
     }
 
@@ -49,6 +102,13 @@ public class FZDMembersProvider extends ContentProvider {
                       @Nullable ContentValues values,
                       @Nullable String selection,
                       @Nullable String[] selectionArgs) {
+        int match = sUriMatcher.match(uri);
+        if (match == MATH_CODE) {
+            SQLiteDatabase writableDatabase = mDatabase.getWritableDatabase();
+            int update = writableDatabase.update(FZDDatabaseHelper.tMembers, values, selection, selectionArgs);
+            writableDatabase.close();
+            return update;
+        }
         return 0;
     }
 }
diff --git a/app/src/main/java/com/enqualcomm/support/provider/MySqlitOpenHelper.java b/app/src/main/java/com/enqualcomm/support/provider/MySqlitOpenHelper.java
new file mode 100644 (file)
index 0000000..714d5b1
--- /dev/null
@@ -0,0 +1,95 @@
+package com.enqualcomm.support.provider;
+
+import android.content.Context;
+import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteOpenHelper;
+
+import com.enqualcomm.support.utils.ICLogger;
+
+
+public class MySqlitOpenHelper extends SQLiteOpenHelper {
+  private static int dbVersion=10;
+  public MySqlitOpenHelper(Context paramContext) { super(paramContext, "data", null, dbVersion); }
+  
+  public void onCreate(SQLiteDatabase sqlite) {
+    sqlite.execSQL("CREATE TABLE CONTACT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,NAME TEXT ,NUMBER TEXT ,ICON TEXT ,EXTRA TEXT)");
+    sqlite.execSQL("CREATE TABLE ALARM(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,WEEK TEXT ,RING TEXT ,STATUS TEXT ,NAME TEXT)");
+    sqlite.execSQL("CREATE TABLE SILENT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");
+    sqlite.execSQL("CREATE TABLE IKNOWLEDGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,SCORE TEXT ,AWARD TEXT)");
+    sqlite.execSQL("CREATE TABLE URLDOWNLOADPIC(_id INTEGER PRIMARY KEY AUTOINCREMENT ,URL TEXT)");
+//提示信息表
+    sqlite.execSQL("CREATE TABLE NOTICE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT,NAME TEXT,NUMBER TEXT,ID TEXT,CATEGORY TEXT,FREQUENCY TEXT,CONTENT TEXT)");
+    sqlite.execSQL("CREATE TABLE WEATHER(_id INTEGER PRIMARY KEY AUTOINCREMENT ,WEATHER_TYPE TEXT,MIN_TEMPERATURE TEXT,MAX_TEMPERATURE TEXT,CUR_TEMPERATURE TEXT,WEATHER_INDEX TEXT,WEATHER_INFO TEXT)");
+    sqlite.execSQL("CREATE TABLE DEVICESTATUS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,IS_SILENCE TEXT,START_MONITOR TEXT,END_MONITOR TEXT,IS_ALARM INTEGER)");
+    sqlite.execSQL("CREATE TABLE DOWNLOADINFO(_id INTEGER PRIMARY KEY AUTOINCREMENT ,IMSI TEXT,TIME TEXT,NUMBER TEXT,TOTAL_NUMBER TEXT)");
+    sqlite.execSQL("CREATE TABLE STHEART_RATE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,INTERVAL TEXT)");
+    sqlite.execSQL("CREATE TABLE UNREADMSG(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,ID TEXT ,COUNT INTEGER,RECVTIME INTEGER)");
+    create_tables(sqlite);
+}
+
+
+  private void create_tables(SQLiteDatabase sqlite){
+
+ /*
+系统对话消息表,包含微聊,系统推送文本,上传图片,上传语音等一系列消息。
+Pushtxt、message
+数据库 Message,记录所有message,包括类型(下发txt,chat msg, chat image),文件url或者文本内容。
+*/
+    sqlite.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT)");
+    //sqlite.execSQL("CREATE TABLE MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT ,CATEGORY INTEGER ,CONTENT TEXT ,PREVIEW TEXT ,STATUS INTEGER ,IN_OR_OUT INTEGER ,CONTACT_CATEGORY INTEGER ,CONTACT_NUMBER TEXT ,SERVER_TIME TEXT ,LOCAL_TIME INTEGER ,ICON TEXT,FILETYPE INTEGER,DATATYPE INTEGER)");
+
+
+
+//日志表格,存储开机关机,低电报警等消息。。。
+    sqlite.execSQL("CREATE TABLE EVENT_MESSAGE(_id INTEGER PRIMARY KEY AUTOINCREMENT , EVENT_TYPE INTEGER, EVENT_NAME TEXT, TIME TEXT )");
+
+/*
+脱腕检测时段AntiOff
+本身需要时间段的,在时间段内才进行 脱腕检测。没有设置时间段的话,或者从0:00~23:59表示持续判断脱腕检测。
+2个数据库,时间段和当前状态记录(包括历史记录)。
+*/
+    sqlite.execSQL("CREATE TABLE ANTIOFF(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");
+    // sqlite.execSQL("CREATE TABLE ANTIOFF_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,TIME TEXT ,STATUS TEXT,CUR_SYS_STATUS TEXT)");
+
+/*
+睡眠
+根据时间段进行检测,时间段内,根据翻滚次数确认其睡眠类型。如深度睡眠或者浅睡。
+2个数据库翻滚次数记录,当每日睡眠情况统计计算,检测时间段记在settings里,就不放在数据库了。
+*/
+    /*每次打点的记录表  SLEEP_DATE 代表记录睡眠的日期,例如 22日上午7:00的计入到21日的睡眠记录中。 DATE代表记录的时间,此出应该等于上文的 22日 7:00 */
+    sqlite.execSQL("CREATE TABLE SLEEP_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,SLEEP_DATE TEXT,DATE TEXT, STEPCOUNT INTEGER ,ROLLTIMES INTEGER ,STATUS TEXT )");
+    /*计算后的分值,每天会在睡眠结束后计算Records获得*/
+    sqlite.execSQL("CREATE TABLE SLEEP_STATUS(_id INTEGER PRIMARY KEY AUTOINCREMENT , DATE TEXT , DEEP_SLEEP INTEGER , LIGHT_SLEEP INTEGER ,SCORE INTEGER )");
+
+/*久坐
+根据时间段进行检测,时间段内,根据计步变化确认其是否在坐着。
+1个数据库 久坐检测时间段,报警时长度要求,报警记录*/
+    sqlite.execSQL("CREATE TABLE SIT(_id INTEGER PRIMARY KEY AUTOINCREMENT ,START_TIME TEXT ,END_TIME TEXT ,WEEK TEXT ,INTERVAL INTEGER)");
+
+
+    /*所有报警的记录表,包括开关机事件*/
+    sqlite.execSQL("CREATE TABLE ALARM_MSG_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT ,DATE TEXT, TIME TEXT ,ALARM TEXT )");
+
+    /*缓存协议记录*/
+    sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");
+
+  }
+  
+  public void onUpgrade(SQLiteDatabase sqlite, int oldDBversion, int newDBversion) {
+    if (oldDBversion < 9) {
+      ICLogger.i("数据库升级 to "+dbVersion);
+      sqlite.execSQL("DROP TABLE IF EXISTS MESSAGE");
+      sqlite.execSQL("DROP TABLE IF EXISTS EVENT_MESSAGE");
+      sqlite.execSQL("DROP TABLE IF EXISTS ANTIOFF");
+      sqlite.execSQL("DROP TABLE IF EXISTS SLEEP_RECORDS");
+      sqlite.execSQL("DROP TABLE IF EXISTS SLEEP_STATUS");
+      sqlite.execSQL("DROP TABLE IF EXISTS SIT");
+      sqlite.execSQL("DROP TABLE IF EXISTS ALARM_MSG_RECORDS");
+      create_tables(sqlite);
+    }else if (oldDBversion == 9 ){
+      /*缓存协议记录*/
+      sqlite.execSQL("CREATE TABLE PROTOCOL_CMD_RECORDS(_id INTEGER PRIMARY KEY AUTOINCREMENT , FLAG INTEGER, DATE TEXT, TIME TEXT ,TOPIC TEXT,CMD TEXT )");
+    }
+  }
+}
+
index 124cec6..de045fd 100644 (file)
@@ -228,7 +228,6 @@ public class DBHelper {
 
             this.cr.bulkInsert(ICContentProvider.DEVICESTATUS_URL, var8);
         }
-
     }
 
     public void deleteMessage(Uri var1) {
index 2b9ad14..145c6d6 100644 (file)
@@ -2,21 +2,24 @@
 package com.ic.protocols;
 
 import android.content.ComponentName;
+import android.content.ContentResolver;
+import android.content.ContentValues;
 import android.content.Context;
 import android.content.Intent;
 import android.content.SharedPreferences;
+import android.net.Uri;
 import android.os.RemoteCallbackList;
 import android.text.TextUtils;
 
 import com.enqualcomm.support.Config;
 import com.enqualcomm.support.CoreService;
 import com.enqualcomm.support.IFZDCallback;
-import com.enqualcomm.support.bean.BaiRuiMember;
 import com.enqualcomm.support.bean.Contact;
 import com.enqualcomm.support.bean.HealthInfo;
 import com.enqualcomm.support.bean.Runtime;
 import com.enqualcomm.support.bean.Silent;
 import com.enqualcomm.support.bean.StringMessage;
+import com.enqualcomm.support.provider.FZDMembersProvider;
 import com.enqualcomm.support.service.HeartRateManager;
 import com.enqualcomm.support.utils.Connection;
 import com.enqualcomm.support.utils.ICLogger;
@@ -28,7 +31,6 @@ import com.enqualcomm.support.utils.regexUtil;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
-import java.util.List;
 
 import static com.enqualcomm.support.Constants.FROM_SERVER;
 import static com.enqualcomm.support.LocationClient.LOCATION_MODE;
@@ -439,9 +441,7 @@ public class protocol_fzd {
                 }
             }
         }
-
         runtime.getDbHelper().saveSilent(slist);
-
     }
 
     public static StringMessage LGZONE(Runtime runtime) {
@@ -675,7 +675,6 @@ public class protocol_fzd {
                     ICLogger.i("find SOS1 number " + list[0]);
                 }
             } else if (list.length == 2) {
-
                 ArrayList<Contact> contactArray = new ArrayList<Contact>();
                 if (regexUtil.isMobileNumber(list[0]) || regexUtil.isPhoneNumber(list[0])) {
                     contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos1", list[0]));
@@ -685,7 +684,6 @@ public class protocol_fzd {
                     contactArray.add(new Contact(Contact.CATEGORY_SOS, "sos2", list[1]));
                     ICLogger.i("find SOS2 number " + list[1]);
                 }
-
                 runtime.getDbHelper().saveContacts(contactArray, false, false, false, false, false, true);
 
             }
@@ -1107,23 +1105,42 @@ public class protocol_fzd {
         //判断一下大小,有可能是没有数据的
         if (!TextUtils.isEmpty(data)) {
             ICLogger.d("members data == > " + data);
-            String s = Util.decodeUnicode2Utf8(data);
-            ICLogger.d("members result == > " + s);
+            String str = Util.decodeUnicode2Utf8(data);
+            ICLogger.d("members result == > " + str);
             //对数据进行切割
-            String[] split = data.split(CMDSPLIT);
+            String[] split = str.split(CMDSPLIT);
             //每3个为一组
+            ICLogger.d("split.length = > " + split.length);
             if (split.length % 3 != 0) {
-                ICLogger.d("数据出错 == > " + s);
+                ICLogger.d("数据出错 == > " + str);
             } else {
-                List<BaiRuiMember> baiRuiMembers = new ArrayList<>();
+                ContentResolver resolver = mRuntime.getContextProxy().getResolver();
+                //添加之前先清空
+                resolver.delete(Uri.parse(FZDMembersProvider.MEMBERS), null, null);
                 for (int i = 0; i < split.length; i += 3) {
-                    BaiRuiMember temp = new BaiRuiMember();
-                    temp.setBairuiId(Integer.parseInt(split[i]));
-                    temp.setName(split[i + 1]);
-                    temp.setPhoneNum(split[i + 2]);
-                    baiRuiMembers.add(temp);
+                    ContentValues contentValues = new ContentValues();
+                    contentValues.put("_id", Integer.parseInt(split[i]));
+                    contentValues.put("user_name", split[i + 1]);
+                    contentValues.put("phone_num", split[i + 2]);
+                    //结果有了,保存到内容提供者里头去.
+                    resolver.insert(Uri.parse(FZDMembersProvider.MEMBERS), contentValues);
+                }
+                //解析完成了,通知UI。
+                RemoteCallbackList<IFZDCallback> fzdCallback = mRuntime.getFZDCallback();
+                try {
+                    ICLogger.d("onContractsLoaded...");
+                    int i = fzdCallback.beginBroadcast();
+                    while (i > 0) {
+                        i--;
+                        IFZDCallback broadcastItem = fzdCallback.getBroadcastItem(i);
+                        //通知UI层数据已经准备好了,可以去获取了。
+                        broadcastItem.onContractsLoaded();
+                    }
+                } catch (Exception e) {
+                    e.printStackTrace();
+                } finally {
+                    fzdCallback.finishBroadcast();
                 }
-                //结果有了,保存到内容提供者里头去.
             }
         }
     }