Kservistorg.ru

ВсС ΠΎ Π±Ρ‹Ρ‚ΠΎΠ²ΠΎΠΉ Ρ‚Π΅Ρ…Π½ΠΈΠΊΠ΅
5 просмотров
Π Π΅ΠΉΡ‚ΠΈΠ½Π³ ΡΡ‚Π°Ρ‚ΡŒΠΈ
1 Π·Π²Π΅Π·Π΄Π°2 Π·Π²Π΅Π·Π΄Ρ‹3 Π·Π²Π΅Π·Π΄Ρ‹4 Π·Π²Π΅Π·Π΄Ρ‹5 Π·Π²Π΅Π·Π΄
Π—Π°Π³Ρ€ΡƒΠ·ΠΊΠ°...

О Ρ‡Π΅ΠΌ сигнализируСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄Π° с Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ

О Ρ‡Π΅ΠΌ сигнализируСт ΠΈΠ·ΠΎΠ±Ρ€Π°ΠΆΠ΅Π½ΠΈΠ΅ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄Π° с Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ?

Π·Π½Π°ΠΊ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄Π° с Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ

Если Π½Π° вашСм устройствС Π²ΠΎΠ·Π½ΠΈΠΊ Π·Π½Π°ΠΊ Android с Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ, Ρ‚ΠΎ это ΡΠ²ΠΈΠ΄Π΅Ρ‚Π΅Π»ΡŒΡΡ‚Π²ΡƒΠ΅Ρ‚ ΠΎ Π½Π°Π»ΠΈΡ‡ΠΈΠΈ Π½Π΅ΠΏΠΎΠ»Π°Π΄ΠΎΠΊ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ вашСго Π°ΠΏΠΏΠ°Ρ€Π°Ρ‚Π½ΠΎΠ³ΠΎ обСспСчСния. Они ΠΌΠΎΠ³ΡƒΡ‚ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡƒΡ‚ΡŒ ΠΈΠ·-Π·Π° нСосознанной установки пиратского прилоТСния ΠΈΠ»ΠΈ появлСния опасного вируса Π² систСмС. Π§Π°Ρ‰Π΅ всСго с описанной Π½Π΅ΡƒΠ΄Π°Ρ‡Π΅ΠΉ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΠΈ ΡΡ‚Π°Π»ΠΊΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ ΠΈΠ»ΠΈ Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π³Π°Π΄ΠΆΠ΅Ρ‚Π°.

Π·Π½Π°ΠΊ Π°Π½Π΄Ρ€ΠΎΠΈΠ΄Π° с Π²ΠΎΡΠΊΠ»ΠΈΡ†Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌ Π·Π½Π°ΠΊΠΎΠΌ Π½Π° Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°

Π Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° ΠΏΠΎΠ΄ Android: ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ синхронизации Π² android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ

image

ΠŸΡ€ΠΈ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΠΌΠ½ΠΎΠ³ΠΈΡ… android-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ процСсс синхронизации Π΄Π°Π½Π½Ρ‹Ρ… прилоТСния с Π΄Π°Π½Π½Ρ‹ΠΌΠΈ Π½Π° сСрвСрС. Π•ΡΡ‚ΡŒ Π΄Π²Π° основных способа ΠΊΠ°ΠΊ Π΄Π°Π½Π½ΡƒΡŽ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΌΠΎΠΆΠ½ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ.
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ способ β€” классичСский (Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ популярный ΠΈ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ простой) β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ AlarmManager ΠΈ Service. НапримСр, ΠΊΠ°ΠΊ описано Π² этой ΡΡ‚Π°Ρ‚ΡŒΠ΅.
Π’Ρ‚ΠΎΡ€ΠΎΠΉ способ β€” Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΒ» (Π½ΠΎ ΠΏΠΎΠΊΠ° Ρ‡Ρ‚ΠΎ, Π²ΠΈΠ΄ΠΈΠΌΠΎ, Ρ€Π΅Π΄ΠΊΠΎ ΠΊΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹ΠΉ) β€” с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SyncAdapter.

Разрабатывая своё ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, ΠΈΠ·Π½Π°Ρ‡Π°Π»ΡŒΠ½ΠΎ я попытался Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ Β«ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½Ρ‹ΠΉΒ» (Ρ‚.Π΅. Π²Ρ‚ΠΎΡ€ΠΎΠΉ способ).

О Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ β€” Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅. РасскаТу сначала ΠΎ Ρ‚ΠΎΠΌ, с ΠΊΠ°ΠΊΠΈΠΌΠΈ слоТностями ΠΈ особСнностями я столкнулся ΠΏΡ€ΠΈ Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ.

ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ синхронизации с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SyncAdapter

ΠŸΡ€Π΅ΠΆΠ΄Π΅ всСго β€” Π΄Π°Π½Π½Ρ‹ΠΉ ΠΌΠ΅Ρ‚ΠΎΠ΄ достаточно ΠΏΠ»ΠΎΡ…ΠΎ описан Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ. Π₯отя Π½Π° сайтС сайтС Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠΎΠ² Android ΠΈ Π΅ΡΡ‚ΡŒ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π±ΠΎΠ»Π΅Π΅ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠΌ (с пояснСниями) Π±ΡƒΠ΄Π΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΏΠΎ этой ссылкС.

Для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π΄Π°Π½Π½ΠΎΠ³ΠΎ способа синхронизации Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ созданиС ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ Ρ‚ΠΈΠΏΠ° эккаунта ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎ для Π’Π°ΡˆΠ΅Π³ΠΎ прСдлоТСния (Ссли ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ эккаунты, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, эккаунты Google Π½Π΅ подходят), Π° это β€” Ρ‚Π΅ΠΌΠ° для ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΠΉ ΡΡ‚Π°Ρ‚ΡŒΠΈ (ΠΏΡ€ΠΈΠΌΠ΅Ρ€ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚ΡƒΡ‚).
Π”Π°Π½Π½Ρ‹ΠΉ эккаунт Π±ΡƒΠ΄Π΅Ρ‚ доступСн Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Settings / Accounts & Sync. Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ (ΠΈ ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅) эккаунта Π±ΡƒΠ΄Π΅Ρ‚ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹ΠΌ Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· Π’Π°ΡˆΠ΅Π³ΠΎ прилоТСния, Π½ΠΎ ΠΈ ΠΈΠ· этого Ρ€Π°Π·Π΄Π΅Π»Π°. Π’ Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ нСсколько эккаунтов для Π’Π°ΡˆΠ΅Π³ΠΎ прилоТСния (Π½ΡƒΠΆΠ½ΠΎ Π»ΠΈ это Π’Π°ΡˆΠ΅ΠΌΡƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ?). Для ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ эккаунта Π½ΡƒΠΆΠ½ΠΎ имя (для OAuth-эккаунтов приходится ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π²Ρ‹Π΄ΡƒΠΌΠ°Π½Π½Ρ‹Π΅ ΠΈΠΌΠ΅Π½Π°).
ΠŸΡ€ΠΈ этом Π½Π΅ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ написанный ΠΊΠΎΠ΄ эккаунта ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Π΅Ρ‚ ΠΊΠ°ΠΊ устройство, Ρ‚Π°ΠΊ ΠΈ эмулятор β€” Ρ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ слоТно. ΠŸΡ€ΠΈ этом, Ссли Π’Ρ‹ создали лишь ΠΊΠΎΠ΄, ΠΎΡ‚Π²Π΅Ρ‡Π°ΡŽΡ‰ΠΈΠΉ Π·Π° эккаунт, ΠΈ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ Π΅Π³ΠΎ ΠΏΡ€ΠΎΡ‚Π΅ΡΡ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, Ρ‚ΠΎ Π½Π΅ Π²Ρ‹ΠΉΠ΄Π΅Ρ‚ β€” Π±Π΅Π· ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ написанного ΠΊΠΎΠ΄Π° SyncAdapter‘a устройство Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅Π·Π°Π³Ρ€ΡƒΠΆΠ°Ρ‚ΡŒΡΡ ΠΏΡ€ΠΈ Π²Ρ…ΠΎΠ΄Π΅ Π² Accounts & Sync.
Как Π±Ρ‹Ρ‚ΡŒ Ссли Π’Π°ΡˆΠ΅ΠΌΡƒ процСссу синхронизации Π½Π΅ Π½ΡƒΠΆΠ΅Π½ эккаунт? ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ dummy-эккаунт.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ ΠΆΠ΅:
Как ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π² Π°ΠΉΡ„ΠΎΠ½ ΠΌΡƒΠ·Ρ‹ΠΊΡƒ Π±Π΅Π· ΠΏΠΎΡ‚Π΅Ρ€ΠΈ

Если Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ с ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ β€” ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌΠΈ Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°, событиями калСндаря ΠΈΠ»ΠΈ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, фотографиями, Ρ‚ΠΎ Ρ‚ΡƒΡ‚ всС ΠΏΡ€ΠΎΡ‰Π΅ (ΠΈ Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ΠΎΠ² Π² сСти ΠΈΠΌΠ΅Π½Π½ΠΎ ΠΏΡ€ΠΎ Ρ‚Π°ΠΊΠΎΠΉ Ρ‚ΠΈΠΏ синхронизации). Если ΠΆΠ΅ синхронизация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ со своими Π΄Π°Π½Π½Ρ‹ΠΌΠΈ, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ, Ρ‡Ρ‚ΠΎΠ± Π±Ρ‹Π» создан свой ContentProvider.
Как Π±Ρ‹Ρ‚ΡŒ, Ссли Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π½Π΅ Ρ…ΠΎΡ‡Π΅Ρ‚ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ своСй Π±Π°Π·ΠΎΠΉ с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ прилоТСниями? ΠŸΡ€ΠΈΠ΄Π΅Ρ‚ΡΡ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ dummy-ContentProvider, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ρ‚Π°ΠΊΠΎΠΉ.

Если всС сдСлано, ΠΈ Π΄Π°ΠΆΠ΅ свой SyncAdapter написан (см. Π½ΠΈΠΆΠ΅ ΠΊΠ°ΠΊ), Ρ‚ΠΎ Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ синхронизация Π±ΡƒΠ΄Π΅Ρ‚ автоматичСски Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒΡΡ ΠΊΠΎΠ³Π΄Π° измСнились Π΄Π°Π½Π½Ρ‹Π΅ Π² локальной Π±Π°Π·Π΅.

Если ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π²Ρ€ΡƒΡ‡Π½ΡƒΡŽ, Ρ‚ΠΎ для этого Π΅ΡΡ‚ΡŒ функция requestSync(), Π½ΠΈΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ написано ΠΎΠ± ограничСниях Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Если Π½ΡƒΠΆΠ½ΠΎ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ автоматичСски, Ρ‚ΠΎ для этого Π΅ΡΡ‚ΡŒ другая функция β€” addPeriodicSync(). Π₯отя Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΎΠ½Π° лишь Π½Π° Android 2.2 ΠΈΠ»ΠΈ Π²Ρ‹ΡˆΠ΅. Но Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ данная функция ΠΎΡ‚Π»ΠΈΡ‡Π½ΠΎ β€” Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли Π² ΠΌΠΎΠΌΠ΅Π½Ρ‚ синхронизации Π½Π΅Ρ‚ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-соСдинСния, Ρ‚ΠΎ синхронизация ΠΏΡ€ΠΎΠΈΠ·ΠΎΠΉΠ΄Π΅Ρ‚ автоматичСски Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° ΠΎΠ½ΠΎ появится.

Как Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SyncAdapter‘Π°

Π§Ρ‚ΠΎ ΠΆΠ΅ трСбуСтся ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ для Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ синхронизации с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SyncAdapter? (ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΎΡ‚Π²Π΅Ρ‚Π° c StackOverflow)

1. Π£Π²Π΅Π΄ΠΎΠΌΠΈΡ‚ΡŒ Android, Ρ‡Ρ‚ΠΎ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°Π΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ

Для этого Π² AndroidManifest.xml Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Π°Ρ‚ΡŒ сСрвис синхронизации:

Π³Π΄Π΅ name β€” имя, ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π΅Π΅ ΠΈΠΌΠ΅Π½ΠΈ класса для синхронизации (ΠΎΠ± этом β€” Ρ‡ΡƒΡ‚ΡŒ Π½ΠΈΠΆΠ΅); exported β€” Π΄Π΅Π»Π°Π΅Ρ‚ сСрвис доступным Π΄Ρ€ΡƒΠ³ΠΈΠΌ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½Ρ‚Π°ΠΌ (Π² Ρ‚.Ρ‡. ΠΈ ContentResolver, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для взаимодСйствия с сСрвисом синхронизации); intent-filter позволяСт ΠΏΠ΅Ρ€Π΅Ρ…Π²Π°Ρ‚Ρ‹Π²Π°Ρ‚ΡŒ событиС, Ρ‚Ρ€Π΅Π±ΡƒΡŽΡ‰Π΅Π΅ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ (Π²ΠΎΠ·Π½ΠΈΠΊΠ°Π΅Ρ‚, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠΎΠ³Π΄Π° синхронизация Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ RequestSync() Π’Π°ΡˆΠ΅Π³ΠΎ ContentResolver‘a).

2. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ сСрвис (слуТбу) для нахоТдСния SyncAdapter‘a

Π’Π°Ρˆ класс Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π°ΡΡˆΠΈΡ€ΡΡ‚ΡŒ Service, Π² Π½Π΅ΠΌ Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ пСрСмСнная экзСмпляра AbstractThreadedSyncAdapter. Он Π΄ΠΎΠ»ΠΆΠ΅Π½ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Ρ‹Π²Π°Ρ‚ΡŒ public IBinder onBind(Intent) ΠΈ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ SyncAdapterBinder.
Достаточно ΠΌΠ½ΠΎΠ³ΠΎΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ Π±Ρ‹Ρ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² этом классС, Ρ‚.ΠΊ. Π΄Π°Π½Π½Ρ‹ΠΉ сСрвис прСдоставляСт стандартный интСрфСйс для SyncAdapter Android’a.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ ΠΆΠ΅:
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° для синхронизации ipod ΠΈ iphone
3. Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ класс SyncAdapter для нСпосрСдствСнного осущСствлСния синхронизации

mySyncAdapter β€” мСсто, Π³Π΄Π΅ содСрТится сама Π»ΠΎΠ³ΠΈΠΊΠ° синхронизации. Когда ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΡ‚ врСмя синхронизации, вызываСтся onPerformSync().

4. ΠžΡΡƒΡ‰Π΅ΡΡ‚Π²ΠΈΡ‚ΡŒ связываниС (binding) ΠΌΠ΅ΠΆΠ΄Ρƒ Ρ‚ΠΈΠΏΠΎΠΌ эккаунта ΠΈ Content Authority

Π’ ΠΏΡƒΠ½ΠΊΡ‚Π΅ 1, Π² Ρ„Π°ΠΉΠ»Π΅ AndroidManifest.xml, Π² ΠΏΠΎΠ»Π΅ name ΠΌΡ‹ ΡƒΠΊΠ°Π·Π°Π»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅, ΠΊΠΎΡ‚ΠΎΡ€ΡƒΡŽ ΠΈ ΠΎΠ±Ρ€Π°Π·ΡƒΠ΅Ρ‚ связь ΠΌΠ΅ΠΆΠ΄Ρƒ ContentAuthority ΠΈ эккаунтом. AndroidManifest.xml ссылаСтся Π½Π° Π΄Ρ€ΡƒΠ³ΠΎΠΉ xml-Ρ„Π°ΠΉΠ». Π’ нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ это sync_myapp.xml:

Π”Π°Π½Π½Ρ‹ΠΉ Ρ„Π°ΠΉΠ» сообщаСт Android’Ρƒ, Ρ‡Ρ‚ΠΎ созданный Π½Π°ΠΌΠΈ SyncAdapter Π±ΡƒΠ΄Π΅Ρ‚ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹.

ВсС значСния строк Π² contentAuthority Π΄ΠΎΠ»ΠΆΠ½Ρ‹ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ со значСниями Ρ‚ΠΎΠ³ΠΎ, с Ρ‡Π΅ΠΌ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ синхронизация. Если синхронизация Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΡ€ΠΎΠΈΡΡ…ΠΎΠ΄ΠΈΡ‚ΡŒ с Π’Π°ΡˆΠ΅ΠΉ собствСнной Π±Π°Π·ΠΎΠΉ, Ρ‚ΠΎ с Π’Π°ΡˆΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Если с ΠΊΠ°ΠΊΠΈΠΌΠΈ-Π»ΠΈΠ±ΠΎ ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ Π±Π°Π·Π°ΠΌΠΈ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, с ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Π°ΠΌΠΈ ΠΈΠ»ΠΈ событиями калСндаря), Ρ‚ΠΎ со стандартными значСниями. НапримСр, ΡƒΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π²Ρ‹ΡˆΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«com.android.contactsΒ» ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚ стандартныС ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹.

Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ accountType Ρ‚Π°ΠΊΠΆΠ΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΡΠΎΠ²ΠΏΠ°Π΄Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ с Π’Π°ΡˆΠΈΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ, Π»ΠΈΠ±ΠΎ со стандартным Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ. Если Π’Ρ‹ создаСтС свой собствСнный Ρ‚ΠΈΠΏ эккаунта, Ρ‚ΠΎ Π’Π°ΠΌ потрСбуСтся ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΈ подкласс AccountAuthenticator, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Π°Π²Ρ‚ΠΎΡ€ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° Π’Π°ΡˆΠ΅ΠΌ сСрвСрС (см. ΡƒΠΆΠ΅ ΡƒΠΊΠ°Π·Π°Π½Π½ΡƒΡŽ Π²Ρ‹ΡˆΠ΅ ΡΡ‚Π°Ρ‚ΡŒΡŽ). Π£ΠΊΠ°Π·Π°Π½Π½ΠΎΠ΅ Π² нашСм ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ Β«com.googleΒ» ΠΈΠ΄Π΅Π½Ρ‚ΠΈΡ„ΠΈΡ†ΠΈΡ€ΡƒΠ΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΌΡ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌ Google-эккаунт.

5. Π’ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ синхронизации для созданной ΠΏΠ°Ρ€Ρ‹ AccountContentAuthority

НаконСц, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ процСсс синхронизации. Π­Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π»ΠΈΠ±ΠΎ Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Settings / Accounts & Sync, Π»ΠΈΠ±ΠΎ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ½ΠΎ Π² Π’Π°ΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ:

Для осущСствлСния синхронизации ΠΎΠ½Π° Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½Π° Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π’Π°ΡˆΠ΅Π³ΠΎ прилоТСния β€” Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ глобальноС Ρ€Π°Π·Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π½Π° ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ (Π² Ρ€Π°Π·Π΄Π΅Π»Π΅ Settings / Accounts & Sync Π΄ΠΎΠ»ΠΆΠ½Π° Π±Ρ‹Ρ‚ΡŒ проставлСна ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰Π°Ρ Π³Π°Π»ΠΊΠ°).
Если ΠΎΠ΄Π½ΠΎ ΠΈΠ· этих условий Π½Π΅ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΎ, Ρ‚ΠΎ Π²Ρ‹Π·ΠΎΠ² RequestSync() Π½ΠΈ ΠΊ Ρ‡Π΅ΠΌΡƒ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ Π½Π΅ ΠΏΡ€ΠΈΠ²Π΅Π΄Π΅Ρ‚, Π·Π°ΠΏΡ€ΠΎΡˆΠ΅Π½Π½Π°Ρ синхронизация ΠΎΠ΄Π½Π°ΠΊΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½Π° ΠΏΡ€ΠΈ Π²ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠΈ синхронизации. Π₯отя, сущСствуСт способ это ΠΎΠ±ΠΎΠΉΡ‚ΠΈ.

Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ Ρ‚Π°ΠΊ ΠΆΠ΅:
ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° ΠΏΠΎ Ρ€Π΅Π³ΡƒΠ»ΠΈΡ€ΠΎΠ²ΠΊΠ΅ яркости Π½Π° ΠΏΠ»Π°Π½ΡˆΠ΅Ρ‚

Π”ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ, ΠΌΠΎΠΆΠ½ΠΎ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ пСриодичСскиС автоматичСскиС синхронизации.

Π’Ρ‹Π²ΠΎΠ΄Ρ‹

И Ρ‚Π°ΠΊ, Ρ‡Π΅ΠΌ ΠΆΠ΅ Ρ…ΠΎΡ€ΠΎΡˆΠ° (+) ΠΈ ΠΏΠ»ΠΎΡ…Π° (-) синхронизация с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ SyncAdapter ΠΏΠΎ ΡΡ€Π°Π²Π½Π΅Π½ΠΈΡŽ с ASyncTask?

(+) слСдованиС стандартам (Π’Π°ΡˆΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Π² спискС всСх ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΡƒΡŽΡ‰ΠΈΡ…ΡΡ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ)
(+) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡŒΠΊΠΈΡ… эккаунтов
(+) простота Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ автоматичСских синхронизаций (ΠΊΠΎΠ³Π΄Π° ΠΎΡΡ‚Π°Π»ΡŒΠ½ΠΎΠ΅ всС ΡƒΠΆΠ΅ написано)
(+) автоматичСская синхронизация ΠΏΡ€ΠΈ появлСнии ΠΈΠ½Ρ‚Π΅Ρ€Π½Π΅Ρ‚-соСдинСния
(+) удобство Π² синхронизации со стандартными Π±Π°Π·Π°ΠΌΠΈ (ΠΊΠΎΠ½Ρ‚Π°ΠΊΡ‚Ρ‹, ΠΊΠ°Π»Π΅Π½Π΄Π°Ρ€ΡŒ ΠΈ Ρ‚.ΠΏ.)
(-) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ создания эккаунта
(-) отсутствиС ΠΏΠΎΠ»Π½ΠΎΡ†Π΅Π½Π½ΠΎΠΉ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ
(-) ΡΠ»ΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΈ тСстирования
(-) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π² Android 2.2 ΠΈ Π²Ρ‹ΡˆΠ΅ для автоматичСских пСриодичСских синхронизаций
(-) Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ создания своСго ContentProvider’a

Π˜Ρ‚ΠΎΠ³ΠΎ, я Π²Ρ‹Π±Ρ€Π°Π» ASyncTask для синхронизации Π² своСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ (хотя ΠΊΠΎΠ΄ для SyncAdapter Π±Ρ‹Π» ΡƒΠΆΠ΅ ΠΏΠΎΡ‡Ρ‚ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ написан) β€” ΠΏΡ€Π΅ΠΆΠ΄Π΅ всСго, Π½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ ΠΎΠ³Ρ€Π°Π½ΠΈΡ‡ΠΈΠ²Π°Ρ‚ΡŒΡΡ вСрсиСй 2.2 Android.

голоса
Π Π΅ΠΉΡ‚ΠΈΠ½Π³ ΡΡ‚Π°Ρ‚ΡŒΠΈ
Бсылка Π½Π° ΠΎΡΠ½ΠΎΠ²Π½ΡƒΡŽ ΠΏΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΡŽ
Adblock
detector