Not: Arka planda işleme özelliklerinin çoğu için önerilen çözüm olarak WorkManager'ı öneriyoruz. Size en uygun çözümü öğrenmek için lütfen arka planda işleme kılavuzuna göz atın.
Uygulamanızdaki senkronizasyon adaptörü bileşeni, cihaz ile sunucu arasında veri aktaran görevlerin kodunu içerir. Senkronizasyon bağdaştırıcısı çerçevesi, uygulamanızda sağladığınız planlamaya ve tetikleyicilere bağlı olarak kodu senkronizasyon bağdaştırıcısı bileşeninde çalıştırır. Uygulamanıza bir senkronizasyon adaptörü bileşeni eklemek için aşağıdaki parçaları eklemeniz gerekir:
- Senkronizasyon bağdaştırıcısı sınıfı.
- Veri aktarımı kodunuzu senkronizasyon bağdaştırıcısı çerçevesiyle uyumlu bir arayüzde sarmalayan sınıf.
-
Service
ile bağlı. - Senkronizasyon bağdaştırıcısı çerçevesinin, senkronizasyon bağdaştırıcısı sınıfınızdaki kodu çalıştırmasına olanak tanıyan bileşen.
- Senkronizasyon bağdaştırıcı XML meta veri dosyası.
- Senkronizasyon bağdaştırıcınızla ilgili bilgileri içeren bir dosya. Çerçeve, veri aktarımlarınızın nasıl yükleneceğini ve planlanacağını öğrenmek için bu dosyayı okur.
- Uygulama manifest dosyasındaki beyanlar.
- Bağlı hizmeti tanımlayan ve bağdaştırıcıya özel meta verileri senkronize etmeye işaret eden XML.
Bu derste, bu öğeleri nasıl tanımlayacağınız gösterilmektedir.
Senkronizasyon bağdaştırıcısı sınıfı oluşturma
Dersin bu bölümünde, veri aktarımı kodunu içeren senkronizasyon bağdaştırıcısı sınıfını nasıl oluşturacağınızı öğreneceksiniz. Sınıfı oluşturmak, senkronizasyon bağdaştırıcısı temel sınıfının genişletilmesini, sınıf için kurucuların tanımlanmasını ve veri aktarımı görevlerini tanımladığınız yöntemin uygulanmasını içerir.
Temel senkronizasyon bağdaştırıcısı sınıfını genişlet
Senkronizasyon bağdaştırıcısı bileşenini oluşturmak için AbstractThreadedSyncAdapter
öğesini genişletip kurucularını yazarak başlayın. Senkronizasyon bağdaştırıcısı bileşeniniz her oluşturulduğunda, bir etkinlik ayarlamak için Activity.onCreate()
uygulamasını kullandığınız gibi, kurulum görevlerini çalıştırmak için kurucuları kullanın. Örneğin, uygulamanız veri depolamak için bir içerik sağlayıcı kullanıyorsa ContentResolver
örneği almak için kurucuları kullanın. Android platform 3.0 sürümünde parallelSyncs
bağımsız değişkenini desteklemek için oluşturucunun ikinci bir biçimi eklendiğinden, uyumluluğu korumak için oluşturucunun iki biçimi oluşturmanız gerekir.
Not: Senkronizasyon bağdaştırıcısı çerçevesi, tekil örnekler olan senkronizasyon bağdaştırıcısı bileşenleri ile çalışacak şekilde tasarlanmıştır. Senkronizasyon bağdaştırıcısı bileşeninin örneklenmesi, Senkronizasyon Bağdaştırıcısını Çerçeveye Bağlama bölümünde daha ayrıntılı olarak değinilmiştir.
Aşağıdaki örnekte AbstractThreadedSyncAdapter
ve kurucularını nasıl uygulayacağınız gösterilmektedir:
Kotlin
/** * Handle the transfer of data between a server and an * app, using the Android sync adapter framework. */ class SyncAdapter @JvmOverloads constructor( context: Context, autoInitialize: Boolean, /** * Using a default argument along with @JvmOverloads * generates constructor for both method signatures to maintain compatibility * with Android 3.0 and later platform versions */ allowParallelSyncs: Boolean = false, /* * If your app uses a content resolver, get an instance of it * from the incoming Context */ val mContentResolver: ContentResolver = context.contentResolver ) : AbstractThreadedSyncAdapter(context, autoInitialize, allowParallelSyncs) { ... }
Java
/** * Handle the transfer of data between a server and an * app, using the Android sync adapter framework. */ public class SyncAdapter extends AbstractThreadedSyncAdapter { ... // Global variables // Define a variable to contain a content resolver instance ContentResolver contentResolver; /** * Set up the sync adapter */ public SyncAdapter(Context context, boolean autoInitialize) { super(context, autoInitialize); /* * If your app uses a content resolver, get an instance of it * from the incoming Context */ contentResolver = context.getContentResolver(); } ... /** * Set up the sync adapter. This form of the * constructor maintains compatibility with Android 3.0 * and later platform versions */ public SyncAdapter( Context context, boolean autoInitialize, boolean allowParallelSyncs) { super(context, autoInitialize, allowParallelSyncs); /* * If your app uses a content resolver, get an instance of it * from the incoming Context */ contentResolver = context.getContentResolver(); ... }
Veri aktarım kodunu ekleme
Senkronizasyon adaptörü bileşeni, veri aktarımını otomatik olarak gerçekleştirmez. Bunun yerine veri aktarım kodunuzu kapsüller. Böylece senkronizasyon bağdaştırıcısı çerçevesi, veri aktarımını uygulamanızın müdahalesine gerek kalmadan arka planda çalıştırabilir. Çerçeve, uygulamanızın verilerini senkronize etmeye hazır olduğunda onPerformSync()
yöntemini uygulamanızı çağırır.
Ana uygulama kodunuzdan senkronizasyon bağdaştırıcısı bileşenine veri aktarımını kolaylaştırmak için senkronizasyon bağdaştırıcısı çerçevesi aşağıdaki bağımsız değişkenlerle onPerformSync()
yöntemini çağırır:
- Hesap
-
Senkronizasyon bağdaştırıcısını tetikleyen etkinlikle ilişkili bir
Account
nesnesi. Sunucunuz hesapları kullanmıyorsa bu nesnedeki bilgileri kullanmanız gerekmez. - Ekstralar
-
Senkronizasyon bağdaştırıcısını tetikleyen etkinlik tarafından gönderilen işaretleri içeren bir
Bundle
. - Yetki
- İçerik sağlayıcının sistemdeki yetkisi. Uygulamanızın bu sağlayıcıya erişimi olmalıdır. Bu yetkili kurum genellikle kendi uygulamanızdaki içerik sağlayıcıya karşılık gelir.
- İçerik sağlayıcı istemcisi
-
Yetkili bağımsız değişkeniyle işaret edilen içerik sağlayıcı için bir
ContentProviderClient
.ContentProviderClient
, içerik sağlayıcıya yönelik basit bir herkese açık arayüzdür.ContentResolver
ile aynı temel işlevlere sahiptir. Uygulamanıza ait verileri depolamak için bir içerik sağlayıcı kullanıyorsanız sağlayıcıya bu nesneyle bağlanabilirsiniz. Aksi takdirde, bu bildirimi görmezden gelebilirsiniz. - Senkronizasyon sonucu
-
Senkronizasyon bağdaştırıcısı çerçevesine bilgi göndermek için kullandığınız bir
SyncResult
nesnesi.
Aşağıdaki snippet'te onPerformSync()
öğesinin genel yapısı gösterilmektedir:
Kotlin
/* * Specify the code you want to run in the sync adapter. The entire * sync adapter runs in a background thread, so you don't have to set * up your own background processing. */ override fun onPerformSync( account: Account, extras: Bundle, authority: String, provider: ContentProviderClient, syncResult: SyncResult ) { /* * Put the data transfer code here. */ }
Java
/* * Specify the code you want to run in the sync adapter. The entire * sync adapter runs in a background thread, so you don't have to set * up your own background processing. */ @Override public void onPerformSync( Account account, Bundle extras, String authority, ContentProviderClient provider, SyncResult syncResult) { /* * Put the data transfer code here. */ }
onPerformSync()
öğesinin gerçek uygulaması, uygulamanızın veri senkronizasyonu gereksinimlerine ve sunucu bağlantı protokollerine bağlı olsa da uygulamanızın gerçekleştirmesi gereken birkaç genel görev vardır:
- Sunucuya bağlanılıyor
- Veri aktarımınız başladığında ağın kullanılabilir olduğunu varsayabilirsiniz, ancak senkronizasyon bağdaştırıcısı çerçevesi bir sunucuya otomatik olarak bağlanmaz.
- Veri indirme ve yükleme
- Senkronizasyon bağdaştırıcıları, veri aktarımı görevlerini otomatik hale getirmez. Bir sunucudan veri indirip içerik sağlayıcıda saklamak istiyorsanız verileri isteyen, indiren ve sağlayıcıya ekleyen kodu sağlamanız gerekir. Benzer şekilde, bir sunucuya veri göndermek isterseniz bu verileri bir dosyadan, veritabanından veya sağlayıcıdan okuyup gerekli yükleme isteğini göndermeniz gerekir. Ayrıca, veri aktarımınız çalışırken oluşan ağ hatalarını da ele almanız gerekir.
- Veri çakışmalarını işleme veya verilerin ne kadar güncel olduğunu belirleme
- Senkronizasyon bağdaştırıcısı, sunucudaki veriler ile cihazdaki veriler arasındaki çakışmaları otomatik olarak işlemez. Ayrıca, sunucudaki verilerin cihazdaki verilerden daha yeni olup olmadığını veya bunun tersini de otomatik olarak algılamaz. Bunun yerine, bu durumu ele almak için kendi algoritmalarınızı sağlamanız gerekir.
- Temizleyin.
- Sunucu bağlantılarını her zaman kapatın ve veri aktarımınızın sonunda geçici dosyalar ile önbellekleri temizleyin.
Not: Senkronizasyon bağdaştırıcısı çerçevesi bir arka plan iş parçacığında onPerformSync()
çalıştırır. Böylece kendi arka plan işlemenizi ayarlamanız gerekmez.
Senkronizasyonla ilgili görevlerinize ek olarak, ağla ilgili normal görevlerinizi birleştirmeyi ve bunları onPerformSync()
öğesine eklemeyi denemelisiniz.
Tüm ağ görevlerinizi bu yönteme yoğunlaştırarak ağ arayüzlerini başlatmak ve durdurmak için gereken pil gücünden tasarruf edersiniz. Ağ erişimini daha verimli hale getirme hakkında daha fazla bilgi edinmek için veri aktarım kodunuza ekleyebileceğiniz çeşitli ağ erişimi görevlerini açıklayan Pili Boşaltmadan Veri Aktarımı eğitim sınıfına bakın.
Senkronizasyon bağdaştırıcısını çerçeveye bağlama
Veri aktarım kodunuz artık bir senkronizasyon bağdaştırıcısı bileşeninde yer almaktadır ancak çerçeveye kodunuza erişmesi için izin vermeniz gerekir. Bunu yapmak için senkronizasyon bağdaştırıcısı bileşeninden çerçeveye özel bir Android bağlayıcı nesne geçiren bağlı bir Service
oluşturmanız gerekir. Bu bağlayıcı nesne sayesinde çerçeve, onPerformSync()
yöntemini çağırabilir ve verileri buna iletebilir.
Senkronizasyon bağdaştırıcısı bileşeninizi hizmetin onCreate()
yönteminde tekil bir örnek olarak somutlaştırın. Bileşeni onCreate()
üzerinde örneklendirmek suretiyle, çerçeve veri aktarımınızı ilk kez çalıştırmaya çalıştığında gerçekleşen hizmet başlayana kadar bileşenin oluşturulmasını erteleyebilirsiniz. Senkronizasyon bağdaştırıcısı çerçevesinin, tetikleyicilere veya planlamaya yanıt olarak senkronizasyon bağdaştırıcınızın birden fazla yürütmesini sıraya koyması durumunda bileşeni iş parçacığı güvenli bir şekilde örneklendirmeniz gerekir.
Örneğin, aşağıdaki snippet'te Service
bağlantısını uygulayan, senkronizasyon bağdaştırıcısı bileşeninizi örnekleyen ve Android bağlayıcı nesnesini alan bir sınıfın nasıl oluşturulacağı gösterilmektedir:
Kotlin
package com.example.android.syncadapter /** * Define a Service that returns an [android.os.IBinder] for the * sync adapter class, allowing the sync adapter framework to call * onPerformSync(). */ class SyncService : Service() { /* * Instantiate the sync adapter object. */ override fun onCreate() { /* * Create the sync adapter as a singleton. * Set the sync adapter as syncable * Disallow parallel syncs */ synchronized(sSyncAdapterLock) { sSyncAdapter = sSyncAdapter ?: SyncAdapter(applicationContext, true) } } /** * Return an object that allows the system to invoke * the sync adapter. * */ override fun onBind(intent: Intent): IBinder { /* * Get the object that allows external processes * to call onPerformSync(). The object is created * in the base class code when the SyncAdapter * constructors call super() * * We should never be in a position where this is called before * onCreate() so the exception should never be thrown */ return sSyncAdapter?.syncAdapterBinder ?: throw IllegalStateException() } companion object { // Storage for an instance of the sync adapter private var sSyncAdapter: SyncAdapter? = null // Object to use as a thread-safe lock private val sSyncAdapterLock = Any() } }
Java
package com.example.android.syncadapter; /** * Define a Service that returns an <code><a href="/reference/android/os/IBinder.html">IBinder</a></code> for the * sync adapter class, allowing the sync adapter framework to call * onPerformSync(). */ public class SyncService extends Service { // Storage for an instance of the sync adapter private static SyncAdapter sSyncAdapter = null; // Object to use as a thread-safe lock private static final Object sSyncAdapterLock = new Object(); /* * Instantiate the sync adapter object. */ @Override public void onCreate() { /* * Create the sync adapter as a singleton. * Set the sync adapter as syncable * Disallow parallel syncs */ synchronized (sSyncAdapterLock) { if (sSyncAdapter == null) { sSyncAdapter = new SyncAdapter(getApplicationContext(), true); } } } /** * Return an object that allows the system to invoke * the sync adapter. * */ @Override public IBinder onBind(Intent intent) { /* * Get the object that allows external processes * to call onPerformSync(). The object is created * in the base class code when the SyncAdapter * constructors call super() */ return sSyncAdapter.getSyncAdapterBinder(); } }
Not: Senkronizasyon bağdaştırıcısı için bağlı bir hizmetin daha ayrıntılı bir örneğini görmek için örnek uygulamaya bakın.
Çerçevenin gerektirdiği hesabı ekleme
Senkronizasyon bağdaştırıcısı çerçevesi, her senkronizasyon adaptörünün bir hesap türüne sahip olmasını gerektirir. Hesap türü değerini Authenticator Meta Veri Dosyasını Ekleme bölümünde beyan etmiştiniz. Şimdi bu hesap türünü Android sisteminde ayarlamanız gerekiyor. Hesap türünü ayarlamak için addAccountExplicitly()
yöntemini çağırarak hesap türünü kullanan bir yer tutucu hesap ekleyin.
Yöntemi çağırmak için en iyi yer, uygulamanızın açılış etkinliğinin onCreate()
yöntemidir. Bunu nasıl yapacağınız aşağıdaki kod snippet'inde gösterilmektedir:
Kotlin
... // Constants // The authority for the sync adapter's content provider const val AUTHORITY = "com.example.android.datasync.provider" // An account type, in the form of a domain name const val ACCOUNT_TYPE = "example.com" // The account name const val ACCOUNT = "placeholderaccount" ... class MainActivity : FragmentActivity() { // Instance fields private lateinit var mAccount: Account ... override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) ... // Create the placeholder account mAccount = createSyncAccount() ... } ... /** * Create a new placeholder account for the sync adapter */ private fun createSyncAccount(): Account { val accountManager = getSystemService(Context.ACCOUNT_SERVICE) as AccountManager return Account(ACCOUNT, ACCOUNT_TYPE).also { newAccount -> /* * Add the account and account type, no password or user data * If successful, return the Account object, otherwise report an error. */ if (accountManager.addAccountExplicitly(newAccount, null, null)) { /* * If you don't set android:syncable="true" in * in your <provider> element in the manifest, * then call context.setIsSyncable(account, AUTHORITY, 1) * here. */ } else { /* * The account exists or some other error occurred. Log this, report it, * or handle it internally. */ } } } ... }
Java
public class MainActivity extends FragmentActivity { ... ... // Constants // The authority for the sync adapter's content provider public static final String AUTHORITY = "com.example.android.datasync.provider"; // An account type, in the form of a domain name public static final String ACCOUNT_TYPE = "example.com"; // The account name public static final String ACCOUNT = "placeholderaccount"; // Instance fields Account mAccount; ... @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ... // Create the placeholder account mAccount = CreateSyncAccount(this); ... } ... /** * Create a new placeholder account for the sync adapter * * @param context The application context */ public static Account CreateSyncAccount(Context context) { // Create the account type and default account Account newAccount = new Account( ACCOUNT, ACCOUNT_TYPE); // Get an instance of the Android account manager AccountManager accountManager = (AccountManager) context.getSystemService( ACCOUNT_SERVICE); /* * Add the account and account type, no password or user data * If successful, return the Account object, otherwise report an error. */ if (accountManager.addAccountExplicitly(newAccount, null, null)) { /* * If you don't set android:syncable="true" in * in your <provider> element in the manifest, * then call context.setIsSyncable(account, AUTHORITY, 1) * here. */ } else { /* * The account exists or some other error occurred. Log this, report it, * or handle it internally. */ } } ... }
Senkronizasyon bağdaştırıcısı meta veri dosyasını ekleme
Senkronizasyon bağdaştırıcısı bileşeninizi çerçeveye bağlamak için çerçeveye bileşeni açıklayan ve ek işaretler sağlayan meta verileri sağlamanız gerekir. Meta veriler, senkronizasyon bağdaştırıcınız için oluşturduğunuz hesap türünü belirtir, uygulamanızla ilişkilendirilmiş bir içerik sağlayıcı yetkilisi tanımlar, sistem kullanıcı arayüzünün senkronizasyon bağdaştırıcılarıyla ilgili bir bölümünü kontrol eder ve senkronizasyonla ilgili diğer işaretleri bildirir. Bu meta verileri, uygulama projenizdeki /res/xml/
dizininde depolanan özel bir XML dosyasında tanımlayın. Dosyaya istediğiniz adı verebilirsiniz ancak
dosya genellikle syncadapter.xml
olarak adlandırılır.
Bu XML dosyası, aşağıdaki özelliklere sahip tek bir <sync-adapter>
XML öğesi içerir:
android:contentAuthority
-
İçerik sağlayıcınızın URI yetkilisi. Temel İçerik Sağlayıcı Oluşturma dersinde uygulamanız için bir sap içerik sağlayıcı oluşturduysanız uygulama manifestinize eklediğiniz
<provider>
öğesindeandroid:authorities
özelliği için belirttiğiniz değeri kullanın. Bu özellik, Manifest'te Sağlayıcıyı Bildirme bölümünde daha ayrıntılı olarak açıklanmıştır.
Senkronizasyon bağdaştırıcınızla bir içerik sağlayıcıdan sunucuya veri aktarıyorsanız bu değer, söz konusu veriler için kullandığınız içerik URI yetkilisiyle aynı olmalıdır. Bu değer aynı zamanda uygulama manifestinizde sağlayıcınızı tanımlayan<provider>
öğesininandroid:authorities
özelliğinde belirttiğiniz yetkililerden biridir. android:accountType
-
Senkronizasyon bağdaştırıcısı çerçevesinin gerektirdiği hesap türü. Değer, Authenticator Meta Veri Dosyası Ekleme bölümünde açıklandığı gibi, kimlik doğrulayıcı meta veri dosyasını oluştururken sağladığınız hesap türü değeriyle aynı olmalıdır. Bu, aynı zamanda, Çerçevenin Gereken Hesabı Ekleme bölümündeki kod snippet'inde sabit
ACCOUNT_TYPE
için belirttiğiniz değerdir. - Ayar özellikleri
-
-
android:userVisible
- Senkronizasyon bağdaştırıcısının hesap türünün görünürlüğünü ayarlar. Varsayılan olarak, hesap türüyle ilişkili hesap simgesi ve etiketi sistemin Ayarlar uygulamasının Hesaplar bölümünde görünür. Bu nedenle, uygulamanızla kolayca ilişkilendirilebilen bir hesap türü veya alan adınız yoksa senkronizasyon bağdaştırıcınızı görünmez yapmanız gerekir. Hesap türünüzü görünmez yaparsanız kullanıcıların, uygulamanızın etkinliklerinden birinde kullanıcı arayüzüyle senkronizasyon bağdaştırıcınızı kontrol etmesine izin verebilirsiniz.
-
android:supportsUploading
-
Buluta veri yüklemenize olanak tanır. Uygulamanız yalnızca veri indiriyorsa bu alanı
false
olarak ayarlayın. -
android:allowParallelSyncs
- Senkronizasyon bağdaştırıcısı bileşeninizin birden fazla örneğinin aynı anda çalışmasına olanak tanır. Uygulamanız birden fazla kullanıcı hesabını destekliyorsa ve birden fazla kullanıcının paralel olarak veri aktarmasına izin vermek istiyorsanız bunu kullanın. Asla birden fazla veri aktarımı çalıştırmazsanız bu işaretin hiçbir etkisi olmaz.
-
android:isAlwaysSyncable
-
Senkronizasyon bağdaştırıcısı çerçevesine, senkronizasyon bağdaştırıcınızı belirttiğiniz herhangi bir zamanda çalıştırabileceğini belirtir. Senkronizasyon bağdaştırıcınızın ne zaman çalışabileceğini programatik olarak kontrol etmek istiyorsanız bu işareti
false
olarak ayarlayın ve ardından senkronizasyon bağdaştırıcısını çalıştırmak içinrequestSync()
yöntemini çağırın. Senkronizasyon bağdaştırıcısı çalıştırma hakkında daha fazla bilgi için Senkronizasyon Bağdaştırıcısı Çalıştırma dersine göz atın
-
Aşağıdaki örnekte, tek bir yer tutucu hesap kullanan ve yalnızca indirme işlemleri yapan bir senkronizasyon bağdaştırıcısının XML'i gösterilmektedir.
<?xml version="1.0" encoding="utf-8"?> <sync-adapter xmlns:android="http://schemas.android.com/apk/res/android" android:contentAuthority="com.example.android.datasync.provider" android:accountType="com.android.example.datasync" android:userVisible="false" android:supportsUploading="false" android:allowParallelSyncs="false" android:isAlwaysSyncable="true"/>
Manifest'te senkronizasyon bağdaştırıcısını bildirme
Senkronizasyon bağdaştırıcısı bileşenini uygulamanıza ekledikten sonra, bileşenin kullanımıyla ilgili izinleri istemeniz ve eklediğiniz Service
sınırını bildirmeniz gerekir.
Senkronizasyon bağdaştırıcısı bileşeni, ağ ile cihaz arasında veri aktaran kodu çalıştırdığından internete erişim izni istemeniz gerekir. Ayrıca, uygulamanızın senkronizasyon bağdaştırıcısı ayarlarını okuma ve yazma izni istemesi gerekir. Böylece, senkronizasyon bağdaştırıcısını uygulamanızdaki diğer bileşenlerden programatik olarak kontrol edebilirsiniz. Ayrıca, uygulamanızın Sub Authenticator oluşturma bölümünde oluşturduğunuz kimlik doğrulayıcı bileşenini kullanmasına olanak tanıyan özel bir izin de istemeniz gerekir.
Bu izinleri istemek için aşağıdakileri uygulama manifestinize <manifest>
alt öğeleri olarak ekleyin:
-
android.permission.INTERNET
- Senkronizasyon bağdaştırıcısı kodunun cihazdan sunucuya veri indirebilmesi veya sunucuya veri yükleyebilmesi için internete erişmesine izin verir. Bu izni daha önce istediyseniz tekrar eklemeniz gerekmez.
-
android.permission.READ_SYNC_SETTINGS
-
Uygulamanızın mevcut senkronizasyon adaptörü ayarlarını okumasına izin verir. Örneğin,
getIsSyncable()
yöntemini çağırmak için bu izne ihtiyacınız var. -
android.permission.WRITE_SYNC_SETTINGS
-
Uygulamanızın, senkronizasyon adaptörü ayarlarını kontrol etmesine izin verir.
addPeriodicSync()
kullanarak periyodik senkronizasyon bağdaştırıcısı çalıştırmalarını ayarlamak için bu izne ihtiyacınız var.requestSync()
yöntemini çağırmak için bu izin gerekmez. Senkronizasyon bağdaştırıcısını çalıştırma hakkında daha fazla bilgi edinmek için Senkronizasyon Bağdaştırıcısı Çalıştırma bölümüne bakın.
Aşağıdaki snippet'te izinlerin nasıl ekleneceği gösterilmektedir:
<manifest> ... <uses-permission android:name="android.permission.INTERNET"/> <uses-permission android:name="android.permission.READ_SYNC_SETTINGS"/> <uses-permission android:name="android.permission.WRITE_SYNC_SETTINGS"/> <uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/> ... </manifest>
Son olarak, çerçevenin senkronizasyon bağdaştırıcınızla etkileşim kurmak için kullandığı sınırlı Service
öğesini bildirmek için aşağıdaki XML'i uygulama manifestinize <application>
alt öğesi olarak ekleyin:
<service android:name="com.example.android.datasync.SyncService" android:exported="false" android:process=":sync"> <intent-filter> <action android:name="android.content.SyncAdapter"/> </intent-filter> <meta-data android:name="android.content.SyncAdapter" android:resource="@xml/syncadapter" /> </service>
<intent-filter>
öğesi, senkronizasyon bağdaştırıcısını çalıştırmak için sistem tarafından gönderilen android.content.SyncAdapter
amaç işlemi tarafından tetiklenen bir filtre oluşturur. Filtre tetiklendiğinde, sistem oluşturduğunuz bağlı hizmeti (bu örnekte SyncService
) başlatır. android:exported="false"
özelliği, yalnızca uygulamanızın ve sistemin Service
'a erişmesine izin verir. android:process=":sync"
özelliği, sisteme Service
özelliğini sync
adlı genel bir paylaşılan işlemde çalıştırmasını bildirir. Uygulamanızda birden fazla senkronizasyon bağdaştırıcısı varsa bunlar bu işlemi paylaşabilir. Bu da ek yükü azaltır.
<meta-data>
öğesi, daha önce oluşturduğunuz senkronizasyon bağdaştırıcısı meta veri XML dosyasının adını sağlar.
android:name
özelliği, bu meta verinin senkronizasyon bağdaştırıcısı çerçevesi için olduğunu belirtir. android:resource
öğesi, meta veri dosyasının adını belirtir.
Artık senkronizasyon adaptörünüzün tüm bileşenlerine sahipsiniz. Bir sonraki derste, senkronizasyon bağdaştırıcısı çerçevesine bir etkinliğe yanıt olarak veya düzenli bir plana göre senkronizasyon bağdaştırıcınızı çalıştırmasını nasıl bildireceğiniz gösterilmektedir.