Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如何保护ContentResolver不被任何应用程序访问?_Android_Sqlite_Android Contentprovider - Fatal编程技术网

Android 如何保护ContentResolver不被任何应用程序访问?

Android 如何保护ContentResolver不被任何应用程序访问?,android,sqlite,android-contentprovider,Android,Sqlite,Android Contentprovider,这里是Android新手 我开始学习ContentProviders,我已经建立了我的第一个ContentProvider,它在内部访问一个私有的SQLiteOpenHelper类,从我的数据库中读取和写入数据 我认为ContentProviders的主要好处之一是,您将所有数据访问代码放在一个地方,并且您唯一应该访问数据库的时间是通过使用ContentProvider的URI的ContentResolver?[如果我错了,请纠正我,我只是认为情况就是这样,因为所有示例都将SQLiteOpenH

这里是Android新手

我开始学习ContentProviders,我已经建立了我的第一个ContentProvider,它在内部访问一个私有的SQLiteOpenHelper类,从我的数据库中读取和写入数据

我认为ContentProviders的主要好处之一是,您将所有数据访问代码放在一个地方,并且您唯一应该访问数据库的时间是通过使用ContentProvider的URI的ContentResolver?[如果我错了,请纠正我,我只是认为情况就是这样,因为所有示例都将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的任何应用程序都应该能够清除该列?如果我不希望其他应用程序弄乱我的数据怎么办


是否有任何方法可以阻止某些应用程序或仅允许某些应用程序能够呼叫我的内容提供商?

除非您已设置并向其他应用程序(开发人员)提供该信息,否则您的内容提供商只能为您的应用程序访问。请看。

啊,好吧,我没意识到它的存在!难道没有办法检测哪个应用程序请求了内容吗?