From: TrillGates Date: Thu, 8 Apr 2021 08:10:22 +0000 (+0800) Subject: completed fzd settings provider. X-Git-Url: http://git.snicker.com.cn/?a=commitdiff_plain;h=51ae2f2d3096053836d287c9766802b1edee8774;p=protocol_srv.git completed fzd settings provider. --- 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 index 00000000..d5b0eb69 --- /dev/null +++ b/app/src/main/java/com/enqualcomm/support/provider/FZDSettingsProvider.java @@ -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; + } +} diff --git a/app/src/main/java/com/ic/protocols/protocol_fzd.java b/app/src/main/java/com/ic/protocols/protocol_fzd.java index 191bfcaf..7b668979 100644 --- a/app/src/main/java/com/ic/protocols/protocol_fzd.java +++ b/app/src/main/java/com/ic/protocols/protocol_fzd.java @@ -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] * 注:有新的数据将追加在后面,所以对接的时候可根据需求抓相应数据,并兼容后续动态追加的可能性 - * + *

* 测试:重新绑定后并无此功能 + * * @param data */ private void handleSettingsInfo(String data) {