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

Senkronizasyon bağdaştırıcısı çerçevesi, esnek ve kullanıcı dostu cihaz tarafından yönetilen cihaz verileriyle çalışacak oldukça güvenli içerik sağlayıcı çerçevesine sahiptir. Bu nedenle, senkronizasyon bağdaştırıcısı çerçevesi Bu çerçeveyi kullanan bir uygulama, yerel verileri için zaten bir içerik sağlayıcı tanımlamış. Senkronizasyon bağdaştırıcısı çerçevesi, senkronizasyon bağdaştırıcınızı çalıştırmaya çalışırsa ve uygulamanızda içerik sağlayıcı, senkronizasyon bağdaştırıcınız kilitleniyor.

Sunucudan cihaza veri aktaran yeni bir uygulama geliştiriyorsanız yerel verileri bir içerik sağlayıcıda saklamayı düşünebilirsiniz. Proje yöneticileri için senkronizasyon adaptörleri, içerik sağlayıcılar çeşitli güvenlik avantajları sunar ve Android sistemlerinde veri depolamayı işleyecek şekilde tasarlanmıştır. İçerik oluşturma hakkında daha fazla bilgi edinmek için İçerik Sağlayıcı Oluşturma bölümüne bakın.

Ancak yerel verileri zaten başka bir biçimde saklıyorsanız senkronizasyonu kullanabilirsiniz. bağdaştırıcısı veya özelliği vardır. Bir bir içerik sağlayıcı kullanıyorsanız, uygulamanıza "güçlü içerik sağlayıcı" ekleyin. Bir saplama sağlayıcı içerik sağlayıcı sınıfı, ancak gerekli tüm yöntemler null veya 0 döndürüyor. Şu durumda: bir senkronizasyon adaptörü kullanarak herhangi bir depolama alanından veri aktarabilirsiniz seçtiğiniz mekanizmayı kullanabilirsiniz.

Uygulamanızda zaten bir içerik sağlayıcı varsa taslak içerik sağlayıcısına ihtiyacınız yoktur. Bu durumda, bu dersi atlayıp derse devam edebilirsiniz. Senkronizasyon Adaptörü oluşturma. Henüz bir Bu derste, YouTube'da izin vereceğiniz zamanlamaya izin veren senkronizasyon adaptörünüzü çerçeveye takın.

Kaçak içerik sağlayıcı ekleyin

Uygulamanız için taslak içerik sağlayıcı oluşturmak üzere sınıfı genişletin. ContentProvider ve gerekli yöntemlerini kaldırın. Aşağıdakiler snippet, saplama sağlayıcısını nasıl oluşturacağınızı gösterir:

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 dosyasında sağlayıcıyı bildirme

Senkronizasyon bağdaştırıcısı çerçevesi, uygulamasının manifest dosyasında bir sağlayıcı beyan edildi. Fatura sağlayıcısını manifest'inde aşağıdaki özelliklere sahip bir <provider> öğesi ekleyin:

android:name="com.example.android.datasync.provider.StubProvider"
. Saplama içerik sağlayıcısını uygulayan sınıfın tam adını belirtir.
android:authorities="com.example.android.datasync.provider"
. Saplama içerik sağlayıcıyı tanımlayan URI yetkilisi. Bu değeri, uygulamanıza ait ".provider" dizesini içeren paket adı eklenir. Her ne kadar sözleşmenizi hiçbir şey sağlayıcıya erişmeye çalışmaz.
android:exported="false"
. Diğer uygulamaların içerik sağlayıcıya erişip erişemeyeceğini belirler. Eski içerikleriniz için sağlayıcı, diğer uygulamaların bunu görmesine izin vermek gerekmediğinden değeri false olarak ayarlayın. sağlayıcıdır. Bu değer, senkronizasyon bağdaştırıcısı çerçevesi arasındaki etkileşimi etkilemez hem de içerik sağlayıcı.
android:syncable="true"
. Sağlayıcının senkronize edilebilir olduğunu gösteren bir işaret ayarlar. Bu işareti true, kodunuzda setIsSyncable() yöntemini çağırmanız gerekmiyor. İşaret, senkronizasyon bağdaştırıcısı çerçevesinin veri oluşturmasını ve aktarımlar yalnızca açıkça yapıldığında gerçekleşir.

Aşağıdaki snippet, Uygulama manifestine <provider> öğesi ekleyin:

<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 veri aktarım kodunuzu kapsayan bileşeni oluşturun. Bu bileşene senkronizasyon adaptörünü kullanmanız gerekir. Bir sonraki derste bu bileşeni uygulamanıza nasıl ekleyeceğiniz gösterilmektedir.