Адаптер синхронизации без учета

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

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

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

Edit2: Я только что посмотрел приложения Weather and Stock в разделе "Настройки" > "Учетные записи и синхронизация". Вы можете видеть, что они позволяют синхронизировать, но не имеют кнопки удаления учетной записи. С другой стороны, приложения Google, Facebook и Skype позволяют синхронизировать PLUS, у них есть кнопка удаления учетной записи. Это означает, что Weather and 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/, говорят, что у ДОЛЖНЫ быть для использования адаптера синхронизации.: S???

Ответ 1

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

Цитата из вашей ссылки:

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

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

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

Ответ 2

Как сообщают разработчики Android,

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

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

Ответ 3

Я получаю много уведомлений от этого вопроса, поэтому я решил поделиться этой информацией. Вот как вы добавляете 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"
/>