0

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?

4

1 回答 1

1

除非您设置了特殊权限并将该信息提供给其他应用程序(开发人员),否则您的内容提供者只能由您的应用程序访问。请参阅内容提供者权限

于 2013-05-27T13:05:15.157 回答