Sync Adapter çatısı, esnek ve çok güvenli bir içerik sağlayıcı çatısı tarafından üretilmiş cihaz verisiyle çalışmak için tasarlanmıştır. Bu sebeple sync adapter çatısı, yerel veri için önceden tanımlanmış içerik sağlayıcı çatısı kullanan bir uygulamaya ihtiyaç duyar. Eğer sync adapter çatısı sync adapter'inizi çalıştırmayı dener de uygulamanız bir içerik sağlayıcıya sahip olmazsa, sync adapter'iniz çöker.
Eğer sunucudan cihaza veri aktarımı yapan yeni bir uygulama geliştiriyorsanız, yerel verinizin bir içerik sağlayıcı içinde korunduğunu dikkate almalısınız. Sync adapter'lerinizin öneminin yanında, içerik sağlayıcılar çeşitli güvenlik faydaları sağlar ve Android sistemlerdeki veri depolamasını yönetir. İçerik sağlayıcı oluşturmak hakkında daha fazla şey öğrenmek için Android Geliştirici Sitesi'ndeki Creating a Content Provider eğitim içeriğine bakabilirsiniz.
Yerel verinizi zaten başka bir tipte saklıyorsanız, o zaman sync adapter'i veri aktarımı işi için kullanabilirsiniz. İçerik sağlayıcı için gereken sync adapter çatısı ihtiyacını karşılamak için uygulamanıza aracı içerik sağlayıcısı (stub content provider) eklemelisiniz. Bir aracı sağlayıcı, içerik sağlayıcı sınıfını yaratır ancak bütün gerekli metotları null ya da 0 döndürür. Eğer bir aracı sağlayıcı eklerseniz, istediğiniz hafıza yöntemini kullanarak veri aktarmak için sync adapter'i kullanabilirsiniz.
Eğer uygulamanızda zaten bir içerik sağlayıcı varsa, aracı içerik sağlayıcıya ihtiyacınız yok demektir. Bu durumda bu eğitim içeriğini geçerek Bir Sync Adapter Oluşturmak eğitimine geçebilirsiniz. Henüz bir içerik sağlayıcınız yoksa, bu ders size sync adapter'inizi çatıya bağlamak için gerekli olan içerik sağlayıcıyı nasıl ekleyebileceğinizi öğretecek.
Bir aracı içerik sağlayıcısı eklemek
Uygulamanıza aracı içerik sağlayıcısı eklemek için, ContentProvider sınıfını genişletip, gerekli metotları geçersiz kılmak gerekir. Aşağıdaki kod parçası bir aracı sağlayıcıyı nasıl yaratacağınızı gösterir:
/*
* Bütün metotları geçersiz kılan bir ContentProvider
* yaratmak.
*/
public class StubProvider extends ContentProvider {
/*
* Her zaman true döner, bu da sağlayıcının doğru
* yüklendiğini gösterir.
*/
@Override
public boolean onCreate() {
return true;
}
/*
* MME tipi için boş string döner.
*/
@Override
public String getType() {
return new String();
}
/*
* query() hiçbir zaman cevap dönmez.
*
*/
@Override
public Cursor query(
Uri uri,
String[] projection,
String selection,
String[] selectionArgs,
String sortOrder) {
return null;
}
/*
* insert() her zaman null döner.
*/
@Override
public Uri insert(Uri uri, ContentValues values) {
return null;
}
/*
* delete() her zaman "no rows affected (hiçbir satır etkilenmemiştir)" döner.
*/
@Override
public int delete(Uri uri, String selection, String[] selectionArgs) {
return 0;
}
/*
* update() her zaman "no rows affected (hiçbir satır etkilenmemiştir)" döner.
*/
public int update(
Uri uri,
ContentValues values,
String selection,
String[] selectionArgs) {
return 0;
}
}
Sağlayıcıyı Manifest'te belirtmek
Sync adapter çatısı, uygulamanızın manifest'ine bakarak uygulamanın içerik sağlayıcıya sahip olup olmadığını tespit eder. Aracı sağlayıcıyı manifest'te tanımlamak için dosyaya aşağıdaki değişkenlere sahip bir <provider> elemanı eklemeniz gerekir:
- android:name="com.example.android.datasync.provider.StubProvider": Aracı içerik sağlayıcıyı yürüten sınıfın tam ismini belirtir.
- android:authorities="com.example.android.datasync.provider": Aracı içerik sağlayıcıyı tanıtan URI yetkilisidir. Bu değeri, uygulamanızın paket isminin sonuna ".provider" koyarak elde ettiğiniz string yapın. Sisteme kendi aracı sağlayıcınızı tanıtsanız bile hiçbir şey sağlayıcıya kendi erişmeye çalışmaz.
- android:exported="false": Diğer uygulamarın içerik sağlayıcıya ulaşıp ulaşamayacağına karar verir. Aracı içerik sağlayıcınız için bu değeri "false" atayın çünkü diğer uygulamaların sağlayıcıya ulaşmasına gerek yoktur. Bu değer, sync adapter çatısı ile içerik sağlayıcı arasındaki etkileşimi etkilemez.
- android:syncable="true": Sağlayıcının eşzamanlanabilir olduğunu belirten bir bayraktır. Bu bayrağı "true" atarsanız kodunuzda callsetIsSyncable() metodunu çağırmanıza gerek yoktur. Bu bayrak, sync adapter çatısının içerik sağlayıcı ile veri aktarımı yapmasına izin verir ancak aktarım sadece siz dışarıdan izin verdiğinizde çalışır.
Aşağıdaki kod parçası, <provider> elemanını nasıl uygulama manifest'ine ekleneceğini gösterir:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.android.network.sync.BasicSyncAdapter"
android:versionCode="1"
android:versionName="1.0" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
...
<provider
android:name="com.example.android.datasync.provider.StubProvider"
android:authorities="com.example.android.datasync.provider"
android:exported="false"
android:syncable="true"/>
...
</application>
</manifest>
Artık sync adapter çatısı tarafından ihtiyaç duyulan değişkenleri yarattınız, şimdi veri aktarım kodunuzu kapsayan bir bileşen yaratabilirsiniz. Bu bileşene sync adapter adı verilir. Bir sonraki eğitim içeriği bu bileşeni uygulamanıza nasıl ekleyeceğinizi anlatacak.
Bu sayfadaki parçalar Android Open Source Project kapsamında oluşturulmuş ve paylaşılmış içeriğin küçük değişiklikler yapılmış halidir ve Creative Commons 2.5 Attribution License'ta belirlenen koşullara göre kullanılmıştır.
Bu eğitim içeriğinin orijinal haline buradan ulaşabilirsiniz: Creating a Stub Content Provider