Senkronizasyon bağdaştırıcısı oluşturma

Not: WorkManager'ı öneririz. . Lütfen şu sayfaya bakın: arka plan işleme rehberini inceleyin.

Uygulamanızdaki senkronizasyon bağdaştırıcısı bileşeni, aktarılan görevlerin kodunu içerir sunucu arasındaki verileri kontrol etmektir. Google Play'de sağladığınız planlamaya ve tetikleyicilere senkronizasyon bağdaştırıcısı çerçevesi, senkronizasyon bağdaştırıcısı bileşenindeki kodu çalıştırır. Bir senkronizasyon adaptörü bileşenini uygulamanıza eklemeniz gerekir:

Senkronizasyon bağdaştırıcısı sınıfı.
. Veri aktarım kodunuzu senkronizasyon bağdaştırıcısıyla uyumlu bir arayüzde sarmalayan sınıf bahsedeceğim.
Service bağlandı.
. Senkronizasyon bağdaştırıcısı çerçevesinin senkronizasyon bağdaştırıcınızdaki kodu çalıştırmasına olanak tanıyan bir bileşen sınıfını kullanır.
Senkronizasyon bağdaştırıcısı XML meta veri dosyası.
. Senkronizasyon bağdaştırıcınızla ilgili bilgileri içeren bir dosya. Çerçeve bu dosyayı veri aktarımını yüklemeyi ve planlamayı öğrenin.
Uygulama manifestindeki beyanlar.
. Bağlayıcı 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 yazın. Sınıfı oluşturmak, senkronizasyon bağdaştırıcısı temel sınıfının genişletilmesini, oluşturucuları ve veri aktarımını tanımladığınız yöntemi uygulama görevlerden biridir.

Temel senkronizasyon bağdaştırıcısı sınıfını genişletme

Senkronizasyon bağdaştırıcısı bileşenini oluşturmak için AbstractThreadedSyncAdapter ve kurucularını yazıyor. Şunu kullanın: oluşturucuları, senkronizasyon bağdaştırıcısı bileşeniniz her oluşturulduğunda kurulum görevlerini çalıştıracak şekilde ayarlamak için Activity.onCreate() kullandığınız gibi etkinliği'ne dokunun. Örneğin, uygulamanız veri depolamak için bir içerik sağlayıcı kullanıyorsa oluşturucuları kullanın ContentResolver örneği almak için. İkinci bir formdan bu yana oluşturucu, parallelSyncs platformunu desteklemek için Android platform 3.0 sürümüne eklenmiştir bağımsız değişkeni üzerinde çalışmaya devam etmek için, uyumluluğu sağlamak üzere iki tür kurucu oluşturmanız gerekir.

Not: Senkronizasyon bağdaştırıcısı çerçevesi, senkronizasyon bağdaştırıcısıyla çalışacak şekilde tasarlanmıştır tekli örnekler olan bileşenler. Senkronizasyon bağdaştırıcısı bileşeninin örneklendirilmesi ele alınmıştır bu bölümde daha ayrıntılı olarak Senkronizasyon Adaptörünü Çerçeveye bağlayın.

Aşağıdaki örnekte, AbstractThreadedSyncAdapterve oluşturucuları:

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 bağdaştırıcısı bileşeni otomatik olarak veri aktarımı yapmaz. Bunun yerine veri aktarımı kodunuzu içerir. Böylece senkronizasyon bağdaştırıcısı çerçevesi arka planda veri aktarımına izin verilmez. Çerçeve hazır olduğunda uygulamanızın verilerini senkronize etmek için Google Etiket Yöneticisi'ni kullanarak onPerformSync()

Verilerin ana uygulama kodunuzdan senkronizasyon adaptörü bileşenine aktarılmasını kolaylaştırmak için senkronizasyon bağdaştırıcısı çerçevesi çağrıları onPerformSync() şu bağımsız değişkenlerden bahsedelim:

Hesap
. Tetikleyen etkinlikle ilişkilendirilmiş bir Account nesnesi senkronize edin. Sunucunuzda hesap kullanılmıyorsa e-tablolarda tutabilirsiniz.
Ekstralar
. Senkronizasyonu tetikleyen etkinliğin gönderdiği işaretleri içeren bir Bundle adaptörü kullanabilirsiniz.
Uzmanlık
. İçerik sağlayıcının sistemdeki yetkisi. Uygulamanızın şunlara erişmesi gerekir: isteyebilirsiniz. Genellikle yetkili kurum, kendi uygulamanızdaki içerik sağlayıcıya karşılık gelir.
ziyaret edin.
İçerik sağlayıcı müşterisi
. İçerik sağlayıcı için,ContentProviderClient yetkili argümanı. ContentProviderClient genel bir hafif fiyattır içerik sağlayıcı arayüzü. Bu araç, ContentResolver Veri depolamak için içerik sağlayıcı kullanıyorsanız bu nesneyle sağlayıcıya bağlanabilirsiniz. Aksi takdirde somut olarak ortaya koyar.
Senkronizasyon sonucu
. Senkronizasyona bilgi göndermek için kullandığınız bir SyncResult nesnesi bağdaştırıcı çerçevesidir.

Aşağıdaki snippet, onPerformSync():

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.
     */
}

Projenin gidişatı boyunca onPerformSync(), şunlara özeldir: uygulamanızın veri senkronizasyonu gereksinimleri ve sunucu bağlantısı protokolleri gibi, uygulamanızın gerçekleştirmesi gereken genel görevler şunlardı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ısı, veri aktarımı görevlerini otomatik hale getirmez. Bir Google Hesabı'nı bir içerik sağlayıcıda depolamak; verileri ister, indirir ve sağlayıcıya ekler. Benzer şekilde sunucuya veri gönderiyorsanız verileri bir dosya, veritabanı veya sağlayıcıdan okumalı ve yükleme isteği gönderin. Ayrıca, veri aktarımı devam ediyor.
Veri uyuşmazlıklarını ele alma veya verilerin ne kadar güncel olduğunu belirleme
. Senkronizasyon bağdaştırıcısı, sunucudaki verilerle veriler arasındaki çakışmaları otomatik olarak işlemez. cihaz üzerinde. Ayrıca, sunucudaki verilerin cihazdaki verilere veya bunun tam tersi geçerlidir. Bunun yerine, her bir kullanıcı için ele alacağız.
Temizleyin.
. Sunucu bağlantılarını her zaman kapatıp geçici dosyaları ve önbellekleri birçok teknik bulunur.

Not: Senkronizasyon bağdaştırıcısı çerçevesi, onPerformSync() adlı cihazda böylece kendi arka plan işlemenizi ayarlamanız gerekmez.

Senkronizasyonla ilgili görevlerinize ek olarak, normal görevleri bulup onPerformSync() Tüm ağ görevlerinizi bu yöntemde yoğunlaştırarak, tam olarak ihtiyacınız olan pil gücünü ağ arayüzlerini başlatmak ve durdurmak için gereken her şey. Ağ erişimini sağlama hakkında daha fazla bilgi için varsa, çeşitli ağ erişimlerini açıklayan Transferring Data Free Training the Battery (Pili Tahliye Etmeden Verileri Aktarma) eğitim sınıfına bakın. veya veri aktarım kodunuza ekleyebileceğiniz görevleri işleyeceğiz.

Senkronizasyon bağdaştırıcısını çerçeveye bağlama

Artık veri aktarımı kodunuz bir senkronizasyon bağdaştırıcısı bileşenine yerleştirilmiştir ancak kullanabilirsiniz. Bunun için bir sınır oluşturmanız gerekir Senkronizasyon bağdaştırıcısından özel bir Android bağlayıcı nesnesi geçiren Service bileşenini çerçeveye ekleyin. Bu bağlayıcı nesnesiyle, çerçeve onPerformSync() yöntem ve ona veri iletebilir.

Senkronizasyon bağdaştırıcısı bileşeninizi onCreate() yöntemi. Örneklendirerek onCreate() içindeki bileşeni Hizmet başlatıldığında bu, çerçeve ilk kez uygulamanızı çalıştırmaya çalıştığında veri aktarımından yararlanabilirsiniz. Senkronizasyonun devre dışı kalması ihtimaline karşı, bileşeni iş parçacığı açısından güvenli bir şekilde somutlaştırmanız gerekir. bağdaştırıcı çerçevesi, tetikleyicilere veya yardımcı olur.

Örneğin, aşağıdaki snippet'te bağlantı Service, senkronizasyon bağdaştırıcısı bileşeninizi örneklendirir ve Android bağlayıcı nesnesi:

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: Bir senkronizasyon bağdaştırıcısı için bağlı hizmet örneğini daha ayrıntılı şekilde görmek istiyorsanız: örnek uygulamaya bakın.

Çerçevenin gerektirdiği hesabı ekleyin

Senkronizasyon bağdaştırıcısı çerçevesi, her senkronizasyon bağdaştırıcısının bir hesap türüne sahip olmasını gerektirir. Beyan ettiniz hesap türü değerine Authenticator Meta Veri Dosyasını ekleyin. Şimdi bu hesap türünü Android sistemi. Hesap türünü ayarlamak için hesap türünü kullanan bir yer tutucu hesap ekleyin addAccountExplicitly() numaralı telefonu arayarak.

Yöntemi çağırmak için en iyi yer Uygulamanızın onCreate() yöntemi açılış etkinliği. Aşağıdaki kod snippet'inde bunu nasıl yapacağınız 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çeveyi Bileşeni açıklayan ve ek işaretler sağlayan meta verilerle birlikte. Meta veriler, senkronizasyon bağdaştırıcınız için oluşturduğunuz hesap türü, bir içerik sağlayıcı yetkilisi bildirir uygulamanızla ilişkilendirilen, senkronizasyon bağdaştırıcılarıyla ilgili sistem kullanıcı arayüzünün bir bölümünü kontrol eder. ve senkronizasyonla ilgili diğer işaretleri tanımlar. Bu meta verileri şurada depolanan özel bir XML dosyasında tanımlayın: uygulama projenizdeki /res/xml/ dizini. Dosyaya istediğiniz adı verebilirsiniz, ancak adı genellikle syncadapter.xml.

Bu XML dosyası şunu içeren tek bir XML öğesi <sync-adapter> içeriyor: <sync-adapter> şu özellikleri kullanın:

android:contentAuthority
. İçerik sağlayıcınızın URI yetkilisidir. Örneğin, Kulama İçerik Sağlayıcısı Oluşturma adlı önceki derste uygulamanızda ilişkilendirmek android:authorities (uygulama manifest dosyanıza eklediğiniz <provider> öğesinde). Bu özellik bu bölümde daha ayrıntılı olarak açıklanmıştır Manifest'te sağlayıcıyı beyan edin.
. Senkronizasyon bağdaştırıcınızı kullanarak bir içerik sağlayıcıdan sunucuya veri aktarıyorsanız bu işlem değeri, bu veriler için kullandığınız içerik URI yetkilisiyle aynı olmalıdır. Bu değer aynı zamanda son teoride belirttiğiniz yetkililerden android:authorities. özelliği hakkında daha fazla bilgi edinin.<provider>
android:accountType
. Senkronizasyon bağdaştırıcısı çerçevesinin gerektirdiği hesap türü. Değer aynı olmalıdır kimlik doğrulayıcı meta veri dosyasını oluştururken sağladığınız hesap türü değeri olarak Authenticator Meta Veri Dosyasını Ekleme bölümünde açıklanmıştır. Bu, aynı zamanda bölümdeki kod snippet'inde sabit ACCOUNT_TYPE Çerçevenin gerektirdiği hesabı ekleyin.
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 simgesi ve hesap türüyle ilişkili etiket Sistemin Ayarlar uygulamasının Hesaplar bölümündedir; bu nedenle senkronizasyonunuzu kolayca ilişkilendirilen bir hesap türünüz veya alan adınız yoksa bağdaştırıcı görünmez nasıl sağlayabileceğini de öğreneceksiniz. Hesap türünüzü görünmez yapsanız da kullanıcıların Senkronizasyon bağdaştırıcınızı, uygulamanızın etkinliklerinden birindeki bir kullanıcı arayüzüyle kontrol edebilirsiniz.
android:supportsUploading
. Buluta veri yüklemenize olanak tanır. Yalnızca uygulamanız varsa bunu false olarak ayarlayın verileri indirir.
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ı hesabına izin vermek istiyorsanız bunu kullanın. paralel olarak veri aktarımı yapmasına olanak tanır. Daha önce çalıştırmazsanız bu işaretin hiçbir etkisi olmaz veri aktarımı sunar.
android:isAlwaysSyncable
. Senkronizasyon bağdaştırıcısı çerçevesine, senkronizasyon bağdaştırıcınızı herhangi bir zamanda çalıştırabileceğini belirtir ve saat seçenekleri de gösterilir. Senkronizasyon işleminin ne zaman yapılacağını programlı bir şekilde çalışabilir, bu işareti false olarak ayarlayıp koşmak için requestSync() senkronizasyon adaptörünü kullanmanız gerekir. Senkronizasyon bağdaştırıcısı çalıştırma hakkında daha fazla bilgi edinmek için şu derse bakın: Senkronizasyon Adaptörünü Çalıştırma

Aşağıdaki örnekte, tek bir yer tutucu hesap kullanan bir senkronizasyon bağdaştırıcısına ait XML ve yalnızca indirme işlemleri yapıyor.

<?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, izin istemeniz gerekir bileşenin kullanımıyla ilgili olup bağlı Service özelliğini beyan etmeniz gerekir. görünür.

Senkronizasyon bağdaştırıcısı bileşeni, ağ ile İnternet'e erişim izni istemeniz gerekir. Ayrıca, uygulamanız Böylece senkronizasyonu kontrol edebilmeniz için senkronizasyon bağdaştırıcısı ayarlarını okuma ve yazma izni isteyebilirsiniz. uygulamanızdaki diğer bileşenlerden programatik olarak sağlamanız gerekir. Ayrıca, uygulamanızın oluşturduğunuz kimlik doğrulayıcı bileşenini kullanmasına olanak tanıyan özel izin Temel Kimlik Doğrulayıcı Oluşturma dersini inceleyebilirsiniz.

Bu izinleri istemek için aşağıdakileri uygulama manifestinize, <manifest>:

android.permission.INTERNET
. Senkronizasyon bağdaştırıcısı kodunun, veri indirebilmesi veya yükleyebilmesi için internete erişmesine izin verir sunucu arasında geçiş yapacaktır. Şu durumda bu izni tekrar eklemeniz gerekmez: istemiştim.
android.permission.READ_SYNC_SETTINGS
. Uygulamanızın mevcut senkronizasyon bağdaştırıcısı ayarlarını okumasına izin verir. Örneğin, getIsSyncable() çağrısına izin vermeniz gerekir.
android.permission.WRITE_SYNC_SETTINGS
. Uygulamanızın senkronizasyon adaptörü ayarlarını kontrol etmesine izin verir. Aşağıdaki işlemleri yapabilmek için bu izne ihtiyacınız var: addPeriodicSync() kullanarak düzenli senkronizasyon bağdaştırıcısı çalıştırmalarını ayarlayın. Aşağıdaki işlemler için bu izin gerekmez: requestSync(). Şu konu hakkında daha fazla bilgi edinmek için: senkronizasyon adaptörünü çalıştırmak için Senkronizasyon Bağdaştırıcısı Çalıştırma başlıklı makaleyi inceleyin.

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 kullandığı bağlı Service öğesini beyan etmek için senkronizasyon bağdaştırıcınızla etkileşimde bulunduğunda, aşağıdaki XML'i uygulama manifestinize bir alt öğe olarak ekleyin / <application>:

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

İlgili içeriği oluşturmak için kullanılan <intent-filter>. öğesi, intent işlemi tarafından tetiklenen bir filtre oluşturur. android.content.SyncAdapter, senkronizasyon bağdaştırıcısını çalıştırmak için sistem tarafından gönderildi. Filtre tetiklendiğinde, sistem oluşturduğunuz bağlı hizmeti başlatır. Bu örnekte SyncService Özellik android:exported="false". yalnızca uygulamanızın ve sistemin Service. Özellik android:process=":sync". sisteme Service öğesini sync. Uygulamanızda birden fazla senkronizasyon bağdaştırıcısı varsa bu işlemi paylaşabilirler. Bu da genel giderleri azaltır.

İlgili içeriği oluşturmak için kullanılan <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. İlgili içeriği oluşturmak için kullanılan android:name. özelliği, bu meta verilerin senkronizasyon bağdaştırıcısı çerçevesi için olduğunu belirtir. İlgili içeriği oluşturmak için kullanılan android:resource. öğesi, meta veri dosyasının adını belirtir.

Artık senkronizasyon bağdaştırıcı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 sırasında senkronizasyon bağdaştırıcınızı çalıştırmasını söyleyin gerektiğini unutmayın.