2012-03-23 12 views
7

This question lo discute para dispositivos Android en general, pero si intenta ejecutar este código en un Kindle Fire, todo lo que obtiene es el nombre del usuario. ¿Hay alguna forma de obtener la dirección de correo electrónico? Esperábamos abrir un cuadro de diálogo con la dirección de correo electrónico ya prellenada para que no tuvieran que escribirla si fuera correcta, pero parece que la única solución es hacer que la vuelvan a escribir.En el Kindle Fire, ¿es posible obtener la dirección de correo electrónico de un usuario?

editar: Aquí está el código que otros hilos han sugerido (que no funciona en el Kindle Fire):

Account[] accounts = AccountManager.get(this).getAccounts(); 
for (Account account : accounts) { 
    // TODO: Check possibleEmail against an email regex or treat 
    // account.name as an email address only for certain account.type values. 
    String possibleEmail = account.name; 
    // possibleEmail is a list of account names, hopefully including the @gmail.com address. 
} 
+0

No ha encontrado una solución para esto, ¿o sí? Estoy experimentando el problema yo mismo – Guardanis

+0

No lo he hecho, por desgracia. –

+0

Mierda, tenía miedo de eso ... Mi aplicación fue descargada por un usuario en Kindle y solo para androides comunes y se topó con este problema ... Creo que la única solución será para mí permitir que el usuario sea identificado por algo más que un correo electrónico si no está disponible ... – Guardanis

Respuesta

0

En el fuego Kindle, es posible obtener la dirección de correo electrónico de un usuario?

Lo sentimos, pero estás totalmente equivocado.

I utilizado para vincular al cuadro de diálogo de inicio de sesión de Google que muestra que todos los usuarios existieron en Kindle Fire.

Por favor, siga este código:

public class AuthAcount { 
    private Context context; 

    private AccountManager mAccountManager; 

    public AuthAcount(Context context) { 
      setContext(context); 
    } 

    public Account[] getAccount() { 
      mAccountManager = AccountManager.get(context); 
      Account[] accounts = mAccountManager 
          .getAccountsByType(GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE); 
      return accounts; 
    } 

    public Context getContext() { 
      return context; 
    } 

    public void setContext(Context context) { 
      this.context = context; 
    } 
} 

P/s: Para utilizar la clase GoogleAuthUtil, podría ser que necesita google-oauth-cliente-1.15.0-rc.jar (Utilice la última versión)

0

En los dispositivos contra incendios que tengo a mi disposición, esto es lo que hice:

final static String TYPE_GOOGLE = "com.google"; 
final static String TYPE_AMAZON = "com.amazon"; 
final static String AMAZON_EMAIL = "com.amazon.pim"; 

public static String getAccountName(final Context context) { 
    boolean amazon = TextUtils.equals(Build.MANUFACTURER, "Amazon"); 
    String type = amazon ? TYPE_AMAZON : TYPE_GOOGLE; 
    String email = null; 
    try { 
     Account acc[] = AccountManager.get(context).getAccountsByType(type); 
     if (acc.length > 0) { 
      email = acc[0].name; 
      for (int i = 0; i < acc.length; i++) { 
       Account account = acc[i]; 
       if (amazon) { 
        // there are a lot of flags, just skip them 
        if (!TextUtils.equals(account.type, TYPE_AMAZON)) { 
         // is it an email account? 
         if (account.type.startsWith(AMAZON_EMAIL)) { 
          email = account.name; 
         } 
        } 
       } 
      } 
     } else { 
      acc = AccountManager.get(context).getAccounts(); 
      if (acc.length > 0) { 
       // just return the first one... 
       email = acc[0].name; 
      } 
     } 
    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
    return email; 
} 

Esto también funciona con dispositivos de Google Play.

Cuestiones relacionadas