2013-05-27 2 views
0

Android новичок здесь.Как защитить ContentResolver от доступа к любому приложению?

Я начинаю узнавать о ContentProviders, и я настроил свой первый ContentProvider, который внутренне обращается к закрытому классу SQLiteOpenHelper для чтения и записи данных из моей базы данных.

Я полагаю, что одним из основных преимуществ ContentProviders является то, что вы помещаете все ваши данные, обращаясь к коду в одном месте, и единственный раз, когда вы должны получить доступ к базе данных, через ContentResolvers, которые используют URI ContentProvider? [исправьте меня, если я ошибаюсь, я просто считаю, что это так, поскольку все примеры помещают 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?

ответ

1

Если вы не настроили special permission и предоставляете эту информацию другим приложениям (разработчикам), ваш контент-провайдер доступен только для вашего приложения. См. Content Provider Permissions.

+0

ах ок, ну не понимал, что существует! – Diskdrive