ContentProvider - это механизм Android для инкапсулирования данных и предоставления к ним безопасного доступа другим приложениям через стандартизированный API. Это один из четырех фундаментальных компонентов Android (наряду с Activity, Service и BroadcastReceiver).
Унифицированный интерфейс доступа к данным:
Безопасность:
Абстракция:
content://com.example.app.provider/table1/42
↑ ↑ ↑ ↑
scheme authority path id
class MyProvider : ContentProvider() {
override fun onCreate(): Boolean
override fun query(...): Cursor?
override fun insert(...): Uri?
override fun update(...): Int
override fun delete(...): Int
override fun getType(uri: Uri): String?
}
<provider
android:name=".MyContentProvider"
android:authorities="com.example.app.provider"
android:exported="true"
android:permission="com.example.app.READ_PERMISSION"/>
class MyProvider : ContentProvider() {
private lateinit var dbHelper: DatabaseHelper
override fun onCreate(): Boolean {
dbHelper = DatabaseHelper(context)
return true
}
override fun query(uri: Uri, projection: Array<String>?, selection: String?,
selectionArgs: Array<String>?, sortOrder: String?): Cursor? {
val db = dbHelper.readableDatabase
return db.query("my_table", projection, selection,
selectionArgs, null, null, sortOrder)
}
// Реализация других методов...
}
val cursor = contentResolver.query(
Uri.parse("content://com.example.app.provider/items"),
null, null, null, null
)
cursor?.use {
while (it.moveToNext()) {
val name = it.getString(it.getColumnIndex("name"))
// Обработка данных
}
}
Критерий | ContentProvider | SharedPreferences | Room/SQLite |
---|---|---|---|
Доступ | Межприложенный | Только внутри app | Только внутри app |
Безопасность | Permissions | Нет | Нет |
Сложность | Высокая | Низкая | Средняя |
Гибкость | Очень гибкий | Ограниченная | Высокая |