--- /dev/null
+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;
+ }
+}