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;
4
6public boolean onCreate() {
7dbHelper = new PersonDatabase(getContext());
8return true;
9}
10
12public 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}
17
19public 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}
24
26public int delete(Uri uri, String selection, String[] selectionArgs) {
27SQLiteDatabase db = dbHelper.getWritableDatabase();
28return db.delete("persons", selection, selectionArgs);
29}
30
32public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
33SQLiteDatabase db = dbHelper.getWritableDatabase();
34return db.update("persons", values, selection, selectionArgs);
35}
36
38public String getType(Uri uri) {
39return "vnd.android.cursor.dir/vnd.example.person";
40}
41}

ContentProvider'ı manifest dosyasında bildirmen gerekir:

1<provider
2android:name=".PersonProvider"
3android:authorities="com.example.app.personprovider"
4android:exported="true" />

`android:exported="true"` diğer uygulamaların erişmesini sağlar.

Reklam · TEST
AdSense Test ReklamıYazı arası (gönderi içi) · Yazı arası

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);
3
4if (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<permission
2android:name="com.example.app.READ_PERSONS"
3android:protectionLevel="normal" />
4
5<provider
6android: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.

Reklam · TEST
AdSense Test ReklamıGönderi altı · Görüntülü
konu hakkında tepkinizi verebilirsiniz