Pregunta

Así que tengo un SyncAdapter implementado en mi aplicación. Utilizo la cuenta de Google existente del usuario ya que estoy sincronizando con las tareas de Google. En la aplicación, los usuarios deben ir a preferencias, habilitar Sync y seleccionar una cuenta. En este punto, trato de obtener una autenticación que cree una ventana emergente pidiendo al usuario que autorice a mi aplicación para que use su cuenta de Google seleccionada.

enter image description here

Todo esto funciona muy bien si el usuario nunca ha instalado mi aplicación antes. Pero, suponga ahora que el usuario desinstale la aplicación y la reinstala en un momento posterior. Cuando abran la aplicación, la configuración no se controla, por supuesto. ¡Pero lo que encontrarán es que la aplicación se sincroniza con su cuenta de Google previamente seleccionada de todos modos!

La razón es que el SyncAdapter se alternaba a Sync de forma predeterminada. Por ejemplo, esta es la vista en la pantalla de cuentas y sincronización después de la instalación antes de que se hayan realizado cambios:

Se verifica para sincronizar de forma predeterminada. En la primera instalación, esto no importa porque mi aplicación aún no está aprobada para acceder a su cuenta de Google. Pero en la reinstalación, sí importa. Entonces mi pregunta es: ¿Qué necesito agregar/cambiar/eliminar para que no sea marcado de forma predeterminada?

Mi syncadapter.xml es el siguiente:

<sync-adapter xmlns:android="http://schemas.android.com/apk/res/android"
    android:contentAuthority="com.nononsenseapps.NotePad"
    android:accountType="com.google"
    android:supportsUploading="true"
    android:userVisible="true" />

Y en el manifiesto:

<service
    android:name=".sync.SyncService"
    android:exported="true" >
    <intent-filter>
        <action android:name="android.content.SyncAdapter" />
    </intent-filter>

    <meta-data
        android:name="android.content.SyncAdapter"
        android:resource="@xml/syncadapter" />
</service>

No hago ninguna llamada en el código Java con respecto a Sync hasta que el usuario seleccione una cuenta en Configuración.

¿Fue útil?

Solución

Puede almacenar una Compensación SharedP y verificarlo en SyncService Start. Si es falso, detenga el servicio y no haga nada.

Recuerde .Apply () o .commit () su nuevo valor de preferencia compartida cuando lo establece de la configuración del usuario para habilitar Sync.

Otros consejos

ContentResolver.setSyncAutomatically(account, ContactsContract.AUTHORITY, false);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top