completed fzd settings provider.
authorTrillGates <williamtrillgates@gmail.com>
Thu, 8 Apr 2021 08:10:22 +0000 (16:10 +0800)
committerTrillGates <williamtrillgates@gmail.com>
Thu, 8 Apr 2021 08:10:22 +0000 (16:10 +0800)
app/src/main/java/com/enqualcomm/support/provider/FZDSettingsProvider.java [new file with mode: 0644]
app/src/main/java/com/ic/protocols/protocol_fzd.java

diff --git a/app/src/main/java/com/enqualcomm/support/provider/FZDSettingsProvider.java b/app/src/main/java/com/enqualcomm/support/provider/FZDSettingsProvider.java
new file mode 100644 (file)
index 0000000..d5b0eb6
--- /dev/null
@@ -0,0 +1,131 @@
+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;
+import android.text.TextUtils;
+
+/**
+ * 防走丢设置的内容提供者
+ * 保存数据keyValue的形式
+ * path代表table,.key表示key的内容
+ * 需要监听设置项变化为:"content://" + AUTHORITY + "/" + PATH+"."+KEY
+ */
+public class FZDSettingsProvider extends ContentProvider {
+
+    public static final String PATH = "settings";
+    public static final String AUTHORITY = "com.ic.fzd.settings";
+    public static final String SETTINGS = "content://" + AUTHORITY + "/" + PATH;
+    private FZDDatabaseHelper mDatabase;
+
+    private static final UriMatcher sUriMatcher;
+
+    private static final int MATH_CODE_TABLE = 0x1;
+
+    static {
+        //添加规则
+        sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
+        sUriMatcher.addURI(AUTHORITY, PATH, MATH_CODE_TABLE);
+    }
+
+    @Override
+    public boolean onCreate() {
+        mDatabase = new FZDDatabaseHelper(getContext());
+        return false;
+    }
+
+    @Nullable
+    @Override
+    public Cursor query(@NonNull Uri uri, @Nullable String[] projection,
+                        @Nullable String selection, @Nullable String[] selectionArgs,
+                        @Nullable String sortOrder) {
+        int match = sUriMatcher.match(uri);
+        if (match == MATH_CODE_TABLE) {
+            SQLiteDatabase readableDatabase = mDatabase.getReadableDatabase();
+            return readableDatabase.query(FZDDatabaseHelper.tSettings, projection,
+                    selection,
+                    selectionArgs,
+                    null, null, sortOrder);
+        }
+        return null;
+    }
+
+    @Nullable
+    @Override
+    public String getType(@NonNull Uri uri) {
+        return null;
+    }
+
+    @Nullable
+    @Override
+    public Uri insert(@NonNull Uri uri, @Nullable ContentValues values) {
+        int match = sUriMatcher.match(uri);
+        if (match == MATH_CODE_TABLE && values != null) {
+            String key = (String) values.get(FZDDatabaseHelper.sKey);
+            SQLiteDatabase writableDatabase = mDatabase.getWritableDatabase();
+            if (!TextUtils.isEmpty(key)) {
+                Cursor query = writableDatabase.query(FZDDatabaseHelper.tSettings,
+                        null, FZDDatabaseHelper.sKey + "=?", new String[]{key},
+                        null, null, null);
+                Uri targetUri;
+                if (query != null && query.moveToNext()) {
+                    writableDatabase.update(FZDDatabaseHelper.tSettings,
+                            values, FZDDatabaseHelper.sKey + "=?",
+                            new String[]{key});
+                    query.close();
+                    targetUri = Uri.parse(SETTINGS + "/" + query.getInt(query.getColumnIndex(FZDDatabaseHelper.sId)));
+                } else {
+                    //为了确保key唯一,没有在sql上加约束,所以先查询一下吧。如果有就走更新
+                    long rowId = writableDatabase.insert(FZDDatabaseHelper.tSettings,
+                            null, values);
+                    //插入的时候,会返回这个,同时会通知监听者
+                    targetUri = Uri.parse(SETTINGS + "/" + rowId);
+                }
+                //通知监听者
+                if (getContext() != null) {
+                    getContext().getContentResolver().notifyChange(
+                            Uri.parse(SETTINGS + "." + key), null
+                    );
+                }
+                return targetUri;
+            }
+        }
+        return null;
+    }
+
+    @Override
+    public int delete(@NonNull Uri uri, @Nullable String selection, @Nullable String[] selectionArgs) {
+        int match = sUriMatcher.match(uri);
+        if (match == MATH_CODE_TABLE) {
+            SQLiteDatabase writableDatabase = mDatabase.getWritableDatabase();
+            return writableDatabase.delete(FZDDatabaseHelper.tSettings, selection, selectionArgs);
+        }
+        return 0;
+    }
+
+    @Override
+    public int update(@NonNull Uri uri, @Nullable ContentValues values, @Nullable String selection, @Nullable String[] selectionArgs) {
+        int match = sUriMatcher.match(uri);
+        if (match == MATH_CODE_TABLE) {
+            SQLiteDatabase writableDatabase = mDatabase.getWritableDatabase();
+            int update = writableDatabase.update(FZDDatabaseHelper.tSettings,
+                    values, selection, selectionArgs);
+            //通知改变
+            if (values != null && getContext() != null) {
+                String key = (String) values.get(FZDDatabaseHelper.sKey);
+                if (key != null) {
+                    getContext().getContentResolver().notifyChange(
+                            Uri.parse(SETTINGS + "." + key), null
+                    );
+                }
+            }
+            return update;
+        }
+        return 0;
+    }
+}
index 191bfca..7b66897 100644 (file)
@@ -1600,6 +1600,8 @@ public class protocol_fzd {
      */
     private void handleLOWBAT(String data) {
         //修改配置文件
+        ICLogger.d("low battery == > " + data);
+
     }
 
     /**
@@ -1612,8 +1614,9 @@ public class protocol_fzd {
      * 实例: [LH*8800000015*0016*INFO,PEDO,1,LowBat,0,FQCY,600,Wear,0,Fall,0,Shake,0]
      * 终端回复: [XT*YYYYYYYYYY*LEN*INFO],实例: [LH*8800000015*0004*INFO]
      * 注:有新的数据将追加在后面,所以对接的时候可根据需求抓相应数据,并兼容后续动态追加的可能性
-     *
+     * <p>
      * 测试:重新绑定后并无此功能
+     *
      * @param data
      */
     private void handleSettingsInfo(String data) {