2012-05-15 13 views
7

Sé cómo encontrar cuentas (que incluirán los ID de correo electrónico de Gmail del usuario) y cómo filtrar la cuenta de Gmail.¿Cómo encontrar la cuenta de Gmail asociada con Android Market?

AccountManager am = AccountManager.get(context); 
     Account[] accounts = am.getAccounts(); 
     ArrayList<String> googleAccounts = new ArrayList<String>(); 
     for (Account ac : accounts) { 
      String acname = ac.name; 
      String actype = ac.type; 
      //add only google accounts 
      if(ac.type.equals("com.google")) { 
       googleAccounts.add(ac.name); 
      } 
      Log.d(TAG, "accountInfo: " + acname + ":" + actype); 
     } 
     return googleAccounts; 

Lo que deseo saber es cómo encontrar la cuenta de Gmail asociada con Android Market? Si va a tratar de eliminar una cuenta de Gmail desde el teléfono Android obtendrá este mensaje enter image description here

pero si intenta eliminar una cuenta de Gmail asociada con Android Market obtendrá el siguiente mensaje (si se pulsa cuenta remove en el mensaje anterior).

enter image description here

Gracias por la ayuda.

+0

¿Te refieres a la cuenta principal de correo electrónico? mira esto http://stackoverflow.com/questions/2112965/how-to-get-the-android-devices-primary-e-mail-address – Ronnie

+1

@ userSeven7s La respuesta solo habla sobre cómo obtener las cuentas en el dispositivo, no el uno asociado con Android Market. Como pueden ver, hay una diferencia. –

+0

¿No es la cuenta principal asociada con la aplicación de mercado? – Ronnie

Respuesta

2

El diálogo

enter image description here

es causada por la aplicación de AbstractAccountAuthenticator#getAccountRemovalAllowed en la cuenta de Google autenticador.

Dado que las implementaciones de llamada de AbstractAccountAuthenticator directamente se previenen con el permiso de solo sistema android.permission.ACCOUNT_MANAGER, será difícil encontrarlo por su cuenta.

+0

Eres una diablos. Lee tu comentario aquí también http: // stackoverflow.com/questions/9801304/android-contentprovider-calls-bursts-of-setnotificationuri-to-cursoradapter-wh. Solo una pregunta rápida, ¿a qué se refiere con el permiso _system only_. –

+0

Significa que para obtener el permiso requerido, 'android.permission.ACCOUNT_MANAGER', su aplicación debe estar firmada con el mismo certificado que las aplicaciones del sistema. evitando que las aplicaciones locales lo llamen, a menos que hayas rooteado tu dispositivo. – Jens

+0

Pero podría obtener el permiso 'android.permission.ACCOUNT_MANAGER' en' Uses Permission' en Android Manifest. –

0

La 'asociación' será administrada por la aplicación Android Market/Google Play, y no creo que tenga ninguna API pública que le diga qué cuentas usa. Además, en versiones recientes, puede usar varias cuentas, por lo que, potencialmente, cualquier cuenta de Google en el teléfono se puede usar con la aplicación Market/Play Store.

¿Por qué exactamente intentas hacer esto? ¿Para poder eliminar cuentas de forma segura? El usuario recibirá un mensaje de error apropiado, por lo que debería poder decidir si eliminar la cuenta o no.

+2

Quiero registrar al usuario en mi aplicación con la cuenta de Gmail asociada con Market. Gmail asociado con Market garantiza que no se elimine o cambie con frecuencia. –

+3

OK, ya veo. Aunque no creo que sea posible averiguarlo de manera confiable. Probablemente su mejor opción sea utilizar la primera cuenta de Google listada. Se configura al activar el dispositivo y generalmente no se elimina. –

+0

Supongo que tienes razón ... :). Esperemos unos días y veamos si alguien tiene algo que sortear. –

2

Por lo que he encontrado, la primera cuenta de Google agregada en el dispositivo es la dirección principal de Google que está asociada con el mercado de Android. Además, obtenemos cuentas de Google en el orden en que se agregaron en el dispositivo. Por lo tanto, las cuentas [0] serán el primer ID de correo electrónico agregado.

String marketAssociatedEmailId = ""; 
Account[] accounts = AccountManager.get(context).getAccountsByType("com.google"); 
if(accounts.length > 0) { 
    marketAssociatedEmailId = accounts[0].name; 
} 

De nuevo, no estoy seguro de esto. Tienes que probarlo tú mismo con varios escenarios.

+1

Puedo cambiar mi dirección de correo electrónico en el Market y comprar aplicaciones en una cuenta diferente a la principal (la que inicié sesión por primera vez en el dispositivo. Sería bueno saber qué cuenta compró/descargó aplicación. Así que podemos controlar la caducidad y cosas por el estilo. – Dpedrinha

Cuestiones relacionadas