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
, kodunuzdasetIsSyncable()
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.