ContentProvider Oluşturma: Uygulamalar Arası Veri Paylaşımı
# ContentProvider Oluşturma: Uygulamalar Arası Veri Paylaşımı
Android'de bir uygulamanın veritabanını başka bir uygulamaya açmak istiyorsan ContentProvider kullanırız. Örneğin, bir kişi uygulaması kişileri, mesaj uygulamasına paylaşabilir. Bu yapı, verileri kontrollü bir şekilde dışarıya sunmanın standart yoludur.
Direct veritabanı erişimi güvenli değildir. ContentProvider, sorguları yönetir, izinleri kontrol eder ve veri bütünlüğünü sağlar. Bir ara katman olarak çalışır.
İlk olarak, ContentProvider'ı extend eden bir sınıf yazarız:
1public class PersonProvider extends ContentProvider {2private static final String AUTHORITY = "com.example.app.personprovider";3private PersonDatabase dbHelper;46public boolean onCreate() {7dbHelper = new PersonDatabase(getContext());8return true;9}1012public Cursor query(Uri uri, String[] projection, String selection,13String[] selectionArgs, String sortOrder) {14SQLiteDatabase db = dbHelper.getReadableDatabase();15return db.query("persons", projection, selection, selectionArgs, null, null, sortOrder);16}1719public Uri insert(Uri uri, ContentValues values) {20SQLiteDatabase db = dbHelper.getWritableDatabase();21long id = db.insert("persons", null, values);22return Uri.withAppendedPath(uri, String.valueOf(id));23}2426public int delete(Uri uri, String selection, String[] selectionArgs) {27SQLiteDatabase db = dbHelper.getWritableDatabase();28return db.delete("persons", selection, selectionArgs);29}3032public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {33SQLiteDatabase db = dbHelper.getWritableDatabase();34return db.update("persons", values, selection, selectionArgs);35}3638public String getType(Uri uri) {39return "vnd.android.cursor.dir/vnd.example.person";40}41}ContentProvider'ı manifest dosyasında bildirmen gerekir:
1<provider2android:name=".PersonProvider"3android:authorities="com.example.app.personprovider"4android:exported="true" />`android:exported="true"` diğer uygulamaların erişmesini sağlar.
Diğer uygulamada bu verilere erişmek için:
1Uri uri = Uri.parse("content://com.example.app.personprovider/persons");2Cursor cursor = getContentResolver().query(uri, null, null, null, null);34if (cursor!= null && cursor.moveToFirst()) {5do {6String name = cursor.getString(cursor.getColumnIndex("name"));7Log.d("Person", name);8} while (cursor.moveToNext());9cursor.close();10}Beklenen çıktı: Veritabanındaki kişi adlarının loglanması.
Eğer veri erişimini kısıtlamak istersen, manifest'te:
1<permission2android:name="com.example.app.READ_PERSONS"3android:protectionLevel="normal" />45<provider6android:name=".PersonProvider"7android:authorities="com.example.app.personprovider"8android:readPermission="com.example.app.READ_PERSONS"9android:exported="true" />Erişen uygulama da manifest'te bu izni talep etmelidir:
1<uses-permission android:name="com.example.app.READ_PERSONS" />ContentProvider, uygulamalar arasında güvenli veri paylaşımının temelini oluşturur. Doğru kurulduğunda, sistem bütünlüğünü koruyarak verileri açar.
0 yorum