SyncAdapter sin una cuenta
Estoy intentando crear un SyncAdapter para mi aplicación de Android para mostrar videos de YouTube de un canal específico. Los videos son de dominio público, así que no quiero que el usuario inicie sesión, cree una cuenta, se autentique, cargue datos o utilice la base de datos de contactos. Simplemente quiero que SyncAdapter actualice periódicamente la base de datos de mi aplicación con los metadatos de vídeo más recientes de ese canal. Ya he construido un ContentProvider para acceder a mi base de datos. Me gusta el hecho de que el SyncProvider se encargará de la capacidad de desactivar la sincronización, la programación y reintentar los mecanismos de retroceso para la actualización.
Pregunté antes si un SyncAdapter era una buena opción para mi caso de uso, y me dijeron que era. Vi el video de I / O de Google, leí los documentos, leí blogs … (ver lista abajo). No he podido conseguir nada para trabajar. Lo mejor que he conseguido es que la cuenta de SyncAdapter aparezca en la configuración global de "Cuentas y sincronización", pero no sea funcional. Incluso si esto funcionó, sería menos que ideal porque prefiero que el usuario no vea la cuenta, excepto desde dentro de mi aplicación. Esto sería aceptable si no había otra opción, siempre y cuando no es necesario acceder a él para configurarlo como todo lo que por defecto a la sincronización automático una vez al día.
- ¿Cómo recuperar el tiempo de 'última sincronización' para una cuenta?
- ¿Cómo puedo obtener mi tipo de cuenta personalizada para que aparezca en la aplicación de contactos de Android?
- Uso de Volley con adaptador de sincronización
- SyncAdapter animación en ejecución - cómo saber si SyncAdapter está sincronizando activamente
- Proveedor de calendario de Android: ¿Existe un identificador único para eventos, utilizable en varios dispositivos?
Incluso intenté usar el SampleSyncAdapter como está y poner puntos de interrupción en las secciones de código de autenticación. No se produce un solo punto de interrupción, por lo que no puedo ver qué desencadena las llamadas o qué datos están contenidos. Me habría pensado que al menos conseguir que mucho.
Estoy empezando a pensar que usar un SyncAdapter es una mala idea a pesar de la recomendación. Todavía tengo que encontrar un ejemplo que está cerca de lo que quiero, y mucho menos un tutorial o completo, organizado y documentos claros. Esto parece que debería ser una tarea común que muchas aplicaciones querrían hacer.
Añada a esta publicación cualquier buena documentación sobre este caso de uso. No puedo encontrar ninguno.
Sin esto, creo que es justo recomendar a todos que no utilicen SyncAdapters para este caso de uso. No estoy hablando para otros casos de uso aquí, así que no saltar con cómo funcionó para su caso de uso si no es como el mío.
También sería útil saber qué versión del nivel de la API se considera lista para el horario estelar. Hay una serie de problemas publicados con respecto a los números de versión. Estoy tratando de permanecer lo más bajo posible para obtener la mayoría de los usuarios. Mi objetivo API actual es 7.
Aquí está la lista de enlaces que he intentado sin éxito, otros pueden encontrar estos más útiles:
Http://developer.android.com/resources/samples/SampleSyncAdapter/index.html
Http://www.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html
Http://naked-code.blogspot.com/2011/05/revenge-of-syncadapter-synchronizing.html
Http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step
Http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step-1
Http://www.finalconcept.com.au/article/view/android-account-manager-step-by-step-2
Android SyncAdapter sin autenticación vs. Android Service
¿Por qué ContentResolver.requestSync no activa una sincronización?
- ¿Cómo se escucha el progreso de Android SyncAdapter?
- SyncAdapter dejó de sincronizar
- Recuperación de llamada de Android SyncAdapter
- Cómo manejar llamadas REST, persistencia de datos, sincronización y observación de ContentProvider
- Sincronizar cliente Android y servidor REST
- ContentResolver.requestSync en Sync Adapter no funciona en Android
- Cómo agregar una etiqueta de aplicación personalizada en la aplicación de contacto androide nativa?
- En Android, ¿debe ejecutarse un adaptador de sincronización de contactos en un proceso independiente?
En resumen, la respuesta es: ContentProvider
, AccountManager
y SyncAdapter
van juntos. Usted debe tener estas tres piezas, incluso si son "tonto".
Como se indicó anteriormente, "ContentProvider, AccountManager y SyncAdapter van juntos". Para su aplicación, puede llamar a la siguiente actividad la primera vez que se carga la aplicación para autenticarse e iniciar la sincronización automáticamente:
public class LoginActivity extends AccountAuthenticatorActivity { private final static String DUMMY_ACCOUNT_NAME = "some_name"; private final static String DUMMY_ACCOUNT_PASS = "some_pass"; private final static String AUTHORITY = "com.android.contacts"; // for example /** Called when the activity is first created. */ @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Account account = new Account(DUMMY_ACCOUNT_NAME, Constants.ACCOUNT_TYPE); AccountManager am = AccountManager.get(this); if (am.addAccountExplicitly(account, DUMMY_ACCOUNT_PASS, null)) { Bundle result = new Bundle(); result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name); result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type); setAccountAuthenticatorResult(result); ContentResolver.setSyncAutomatically(account, AUTHORITY, true); } finish(); } }
Esto funciona en la API de Android 5+.
- Disposición de Android: distinguir un dispositivo grande de 800×480 de una tableta 1024×600
- Reinicio automático de la aplicación tras la actualización del mercado