Android新手在这里。
我开始了解ContentProviders并且我已经设置了我的第一个ContentProvider,它在内部访问私有SQLiteOpenHelper类,以便从我的数据库中读取和写入数据。
我认为ContentProviders的主要好处之一就是您将所有数据访问代码放在一个地方,并且您应该访问数据库的唯一时间是通过使用ContentProvider的URI的ContentResolvers? [纠正我,如果我错了,我只是认为是这种情况,因为所有的例子都把SQLiteOpenHelper作为私人类]
所以我最近在ContentProvider中编写了一个更新方法,用于清除数据库中的列。它看起来大致像这样
@Override
public int update(Uri uri, ContentValues values, String where,
String[] whereArgs) {
SQLiteDatabase database = dbHelper.getWritableDatabase();
int count;
switch (uriMatcher.match(uri)) {
case FACT_ID:
String segment = uri.getPathSegments().get(1);
count = database.update(TABLE_FACT, values,
KEY_ID
+ "="
+ segment
+ (!TextUtils.isEmpty(where) ? " AND (" + where
+ ')' : ""), whereArgs);
break;
case CLEAR_DATESEEN:
ContentValues cv = new ContentValues();
cv.putNull(KEY_DATESEEN);
count = database.update(TABLE_FACT, cv, null, null);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
代码的CLEAR_DATESEEN位是清除列的位。
这有效,但我只是想知道,这是不是意味着调用该URI的设备上的任何应用程序都应该能够清除该列?如果我不想让其他应用程序弄乱我的数据怎么办?
有没有办法阻止某些应用或只允许某些应用能够调用我的ContentProvider?
答案 0 :(得分:1)
除非您已设置special permission并将该信息提供给其他应用(开发人员),否则您的内容提供商仅可供您的应用访问。请参阅Content Provider Permissions。