Адаптер синхронизации без учетной записи - PullRequest
41 голосов
/ 28 февраля 2011

Мне нужно получить некоторые данные через облако из моего приложения. Я смотрел видео Google IO в приложениях RESTful для Android @ http://www.youtube.com/watch?v=xHXn3Kg2IQE&t=43m58s На последних слайдах рекомендуется использовать SyncAdapter для интеграции с системой Android.

Позже я узнал, что для реализации SyncAdapter необходимо использовать учетную запись. Мое приложение не использует учетную запись. Пользователи могут свободно загружать данные без регистрации. Могу ли я использовать SyncAdapter? Есть ли на складе фиктивная учетная запись, которую я мог бы использовать?

Изменить: у меня есть поставщик контента для моего приложения, так что это не проблема

Edit2: я только что посмотрел приложения «Погода» и «Фондовая» в разделе «Настройки» -> «Аккаунты и синхронизация». Вы можете видеть, что они позволяют синхронизироваться, но не имеют кнопки удаления учетной записи. С другой стороны, приложения Google, Facebook и Skype позволяют синхронизировать ПЛЮС, у них есть кнопка удаления учетной записи. Это означает, что Weather и Stock не используют учетные записи, в то время как Google, Facebook и Skype используют.

Обучающие программы, которые я нашел @ http://ericmiles.wordpress.com/2010/09/22/connecting-the-dots-with-android-syncadapter/ и @ http://www.c99.org/2010/01/23/writing-an-android-sync-provider-part-1/, говорят, что у одного ДОЛЖНА быть учетная запись для использования Sync Adapter. : S ???

Ответы [ 3 ]

18 голосов
/ 05 сентября 2013

Как говорят в документации для разработчиков Android

Даже если ваше приложение не использует учетные записи, вам все равно нужно предоставить компонент аутентификатора.Если вы не используете учетные записи или имя входа на сервер, информация, обрабатываемая средством проверки подлинности, игнорируется, поэтому вы можете предоставить компонент средства проверки подлинности, содержащий реализации метода-заглушки.Вам также необходимо предоставить связанную Службу, которая позволяет инфраструктуре адаптера синхронизации вызывать методы аутентификатора.

Существует целая статья Создание аутентификатора-заглушки .Я понимаю, что этот вопрос старый и ответ был принят давно, но я чувствовал, что сюда следует включить недавнее дополнение к официальным документам.

12 голосов
/ 10 апреля 2012

Я продолжаю получать множество уведомлений по этому вопросу, поэтому я решил поделиться этой информацией. Вот как вы можете добавить SyncAdapter без учетной записи. Вы можете поместить это в onCreate из MyApplication extends Application класса. Это предполагает, что вы уже внедрили SyncAdapter и ContentProvider. Вы можете сделать это, следуя инструкциям, перечисленным в вопросе.

final String ACCOUNT_NAME = "MyApp";
final String ACCOUNT_TYPE = "com.myapp.account";
final String PROVIDER = "com.myapp.provider";

Account appAccount = new Account(ACCOUNT_NAME,ACCOUNT_TYPE);
AccountManager accountManager = AccountManager.get(getApplicationContext());
if (accountManager.addAccountExplicitly(appAccount, null, null)) {
   ContentResolver.setIsSyncable(appAccount, PROVIDER, 1);
   ContentResolver.setMasterSyncAutomatically(true);
   ContentResolver.setSyncAutomatically(appAccount, PROVIDER, true);
}

Рез / XML / syncadapter.xml

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="@string/provider"
    android:accountType="@string/account_type"  
    android:userVisible="true"  
    android:supportsUploading="true"
/>

Рез / XML / authenticator.xml

<account-authenticator xmlns:android="http://schemas.android.com/apk/res/android"
    android:accountType="@string/account_type"
    android:icon="@drawable/app_icon"
    android:smallIcon="@drawable/app_icon"
    android:label="@string/app_label"
/>
11 голосов
/ 01 марта 2011

Я создал адаптер синхронизации контактов, в котором у меня нет экранов авторизации и / или настройки учетной записи.Это было не так сложно.Я не думаю, что иметь дело с материалами Аккаунта Android было так много.

Цитата из вашей учебной ссылки:

Плохая новость в том, что нет «фондовый », чтобы дать вам простой способ создать учетную запись в системе.Однако в том же Примере адаптера синхронизации, который поставляется с SDK, есть много кода, который вы можете позаимствовать для обеспечения функциональности учетной записи.Если вам не нужен пользовательский экран с учетными данными, вы можете перехватить весь код в пакете com.example.android.samplesync.authenticator с небольшими изменениями.

Так что это в основном просто копирование и вставкаиз примера, это в значительной степени то, что я сделал, и все работало нормально.

Я не знаю точно, но все адаптеры, которые не имеют «Удалить учетную запись», кажутся встроенными адаптерами ПЗУ навсе устройства, на которые я смотрел.Я не уверен, что вы должны беспокоиться об этом.

...