Temel içerik sağlayıcı oluşturma

Senkronizasyon bağdaştırıcısı çerçevesi, esnek ve yüksek güvenlikli içerik sağlayıcı çerçevesi tarafından yönetilen cihaz verileriyle çalışacak şekilde tasarlanmıştır. Bu nedenle, senkronizasyon bağdaştırıcısı çerçevesi, çerçeveyi kullanan bir uygulamanın yerel verileri için zaten bir içerik sağlayıcı tanımlamış olmasını bekler. Senkronizasyon bağdaştırıcısı çerçevesi, senkronizasyon bağdaştırıcınızı çalıştırmaya çalışırsa ve uygulamanızın bir içerik sağlayıcısı yoksa senkronizasyon bağdaştırıcınız kilitlenir.

Verileri bir sunucudan cihaza aktaran yeni bir uygulama geliştiriyorsanız yerel verileri bir içerik sağlayıcıda depolamayı kesinlikle düşünmelisiniz. İçerik sağlayıcılar, senkronizasyon bağdaştırıcılarına yönelik önemlerinin yanı sıra çeşitli güvenlik avantajları sunarlar ve Android sistemlerinde veri depolamayı işlemek için özel olarak tasarlanmıştır. İçerik sağlayıcı oluşturma hakkında daha fazla bilgi için İçerik Sağlayıcı Oluşturma konusuna bakın.

Ancak yerel verileri zaten başka bir biçimde depoluyorsanız veri aktarımını işlemek için senkronizasyon adaptörü kullanmaya devam edebilirsiniz. Bir içerik sağlayıcının senkronizasyon bağdaştırıcısı çerçevesi gereksinimini karşılamak için uygulamanıza bir saplama içerik sağlayıcısı ekleyin. Bir sap sağlayıcı, içerik sağlayıcı sınıfını uygular ancak gerekli yöntemlerinin tümü null veya 0 değerini döndürür. Bir saplama sağlayıcı eklerseniz seçtiğiniz depolama mekanizmasından veri aktarmak için bir senkronizasyon adaptörü kullanabilirsiniz.

Uygulamanızda zaten bir içerik sağlayıcı varsa geçici içerik sağlayıcısına ihtiyacınız yoktur. Bu durumda, bu dersi atlayıp Senkronizasyon Bağdaştırıcısı Oluşturma dersine geçebilirsiniz. Henüz bir içerik sağlayıcınız yoksa bu derste, senkronizasyon bağdaştırıcınızı çerçeveye takmanıza olanak tanıyan bir sap içerik sağlayıcısını nasıl ekleyeceğiniz gösterilmektedir.

Köklü içerik sağlayıcı ekle

Uygulamanız için bir taslak içerik sağlayıcısı oluşturmak amacıyla ContentProvider sınıfının kapsamını genişletin ve gerekli yöntemlerini öğrenin. Aşağıdaki snippet'te saplama sağlayıcının nasıl oluşturulacağı gösterilmektedir:

Kotlin

/*
 * Define an implementation of ContentProvider that stubs out
 * all methods
 */
class StubProvider : ContentProvider() {
    /*
     * Always return true, indicating that the
     * provider loaded correctly.
     */
    override fun onCreate(): Boolean  = true

    /*
     * Return no type for MIME type
     */
    override fun getType(uri: Uri): String?  = null

    /*
     * query() always returns no results
     *
     */
    override fun query(
            uri: Uri,
            projection: Array<String>,
            selection: String,
            selectionArgs: Array<String>,
            sortOrder: String
    ): Cursor?  = null

    /*
     * insert() always returns null (no URI)
     */
    override fun insert(uri: Uri, values: ContentValues): Uri? = null

    /*
     * delete() always returns "no rows affected" (0)
     */
    override fun delete(uri: Uri, selection: String, selectionArgs: Array<String>): Int = 0

    /*
     * update() always returns "no rows affected" (0)
     */
    override fun update(
            uri: Uri,
            values: ContentValues,
            selection: String,
            selectionArgs: Array<String>
    ): Int = 0
}

Java

/*
 * Define an implementation of ContentProvider that stubs out
 * all methods
 */
public class StubProvider extends ContentProvider {
    /*
     * Always return true, indicating that the
     * provider loaded correctly.
     */
    @Override
    public boolean onCreate() {
        return true;
    }
    /*
     * Return no type for MIME type
     */
    @Override
    public String getType(Uri uri) {
        return null;
    }
    /*
     * query() always returns no results
     *
     */
    @Override
    public Cursor query(
            Uri uri,
            String[] projection,
            String selection,
            String[] selectionArgs,
            String sortOrder) {
        return null;
    }
    /*
     * insert() always returns null (no URI)
     */
    @Override
    public Uri insert(Uri uri, ContentValues values) {
        return null;
    }
    /*
     * delete() always returns "no rows affected" (0)
     */
    @Override
    public int delete(Uri uri, String selection, String[] selectionArgs) {
        return 0;
    }
    /*
     * update() always returns "no rows affected" (0)
     */
    public int update(
            Uri uri,
            ContentValues values,
            String selection,
            String[] selectionArgs) {
        return 0;
    }
}

Manifest'te sağlayıcıyı bildirin

Senkronizasyon bağdaştırıcısı çerçevesi, uygulamanızın uygulama manifest dosyasında sağlayıcı beyan edip etmediğini kontrol ederek uygulamanızın bir içerik sağlayıcısı olduğunu doğrular. Manifest'te saplama sağlayıcıyı tanımlamak için aşağıdaki özelliklere sahip bir <provider> öğesi ekleyin:

android:name="com.example.android.datasync.provider.StubProvider"
Şablon içeriği sağlayıcıyı uygulayan sınıfın tam nitelikli adını belirtir.
android:authorities="com.example.android.datasync.provider"
Şablon içeriği sağlayıcıyı tanımlayan URI yetkilisi. Bu değeri, sonuna ".provider" dizesi ekleyerek uygulamanızın paket adı haline getirin. Şablon sağlayıcınızı sisteme bildirseniz bile hiçbir şey sağlayıcının kendisine erişmeye çalışmaz.
android:exported="false"
Diğer uygulamaların içerik sağlayıcıya erişip erişemeyeceğini belirler. Diğer uygulamaların sağlayıcıyı görmesine izin vermeniz gerekmediğinden, varsayılan içerik sağlayıcınızın değerini false olarak ayarlayın. Bu değer, senkronizasyon bağdaştırıcısı çerçevesi ile içerik sağlayıcı arasındaki etkileşimi etkilemez.
android:syncable="true"
Sağlayıcının senkronize edilebilir olduğunu belirten bir işaret ayarlar. Bu işareti true olarak ayarlarsanız kodunuzda setIsSyncable() kodunu çağırmanız gerekmez. İşaret, senkronizasyon bağdaştırıcısı çerçevesinin içerik sağlayıcı ile veri aktarımları yapmasına olanak tanır ancak aktarımlar yalnızca bunları açıkça yaparsanız gerçekleşir.

Aşağıdaki snippet'te <provider> öğesinin uygulama manifestine nasıl ekleneceği gösterilmektedir:

<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>

Senkronizasyon bağdaştırıcısı çerçevesinin gerektirdiği bağımlılıkları oluşturduğunuza göre artık veri aktarım kodunuzu kapsayan bileşeni oluşturabilirsiniz. Bu bileşene senkronizasyon adaptörü adı verilir. Bir sonraki derste bu bileşeni uygulamanıza nasıl ekleyeceğiniz gösterilmektedir.