verificacion telefono sincronizar perdi google funciona entrar como codigo celular cambio authenticator autenticador android accountmanager

android - telefono - Autentificador de cuenta personalizado. Limpieza después de que la cuenta se elimine del dispositivo



perdi google authenticator (2)

No vi muchos ejemplos sobre cómo las personas implementan la limpieza de la cuenta, así que pensé que publicaría mi solución (en realidad, una variación de la respuesta aceptada).

public class AccountAuthenticatorService extends Service { private AccountManager _accountManager; private Account[] _currentAccounts; private OnAccountsUpdateListener _accountsUpdateListener = new OnAccountsUpdateListener() { @Override public void onAccountsUpdated(Account[] accounts) { // NOTE: this is every account on the device (you may want to filter by type) if(_currentAccounts == null){ _currentAccounts = accounts; return; } for(Account currentAccount : _currentAccounts) { boolean accountExists = false; for (Account account : accounts) { if(account.equals(currentAccount)){ accountExists = true; break; } } if(!accountExists){ // Take actions to clean up. Maybe send intent on Local Broadcast reciever } } } }; public AccountAuthenticatorService() { } @Override public void onCreate() { super.onCreate(); _accountManager = AccountManager.get(this); // set to true so we get the current list of accounts right away. _accountManager.addOnAccountsUpdatedListener(_accountsUpdateListener, new Handler(), true); } @Override public void onDestroy() { super.onDestroy(); _accountManager.removeOnAccountsUpdatedListener(_accountsUpdateListener); } @Override public IBinder onBind(Intent intent) { AccountAuthenticator authenticator = new AccountAuthenticator(this); return authenticator.getIBinder(); } }

¿Hay alguna manera de obtener algún tipo de notificación / transmisión / etc. ¿Cuándo se elimina una cuenta personalizada de "Configuración de cuentas y sincronización"?

La aplicación que tengo puede facilitar múltiples usuarios en un dispositivo (esto es para uso corporativo) y utiliza una única base de datos SQLite. Supongamos que creo varios usuarios para mi aplicación en un dispositivo y relleno la base de datos con datos que solo son relevantes para esos dos usuarios. Mi problema aquí es que si uno de los usuarios es eliminado de "Configuración de cuentas y sincronización" no tengo forma de limpiar la base de datos y / o algunos archivos externos en la tarjeta SD.

Podría duplicar la información del usuario en una tabla redundante y compararla con las cuentas registradas y luego eliminar los datos del usuario de la base de datos si la información del usuario en la tabla y la matriz de Cuenta [] de AccountManager no coincide. Me siento sucio.


Tienes dos opciones:

  1. Puede usar el método addOnAccountsUpdatedListener de AccountManager para agregar un servicio de escucha en el método onCreate de una Activity o Service ; asegúrese de eliminar el servicio de escucha en su método onDestroy (es decir, NO use esto en un servicio que se ejecute de forma continua) o el Context utilizado para recuperar el AccountManager nunca será recogido basura

  2. El Servicio de AccountsService emitirá un intento con la acción AccountManager.LOGIN_ACCOUNTS_CHANGED_ACTION cada vez que se agregue, elimine o cambie una cuenta a la que puede agregar un receptor.