2013-05-27 40 views
0

Android新手在这里。如何保护ContentResolver不被任何应用程序访问?

我开始学习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?

回答

相关问题