Android 在KindleFire上,是否有可能获得一个用户';谁的电子邮件地址?
讨论了android设备的一般情况,但如果您尝试在KindleFire上运行此代码,您得到的只是用户名。有没有办法获得电子邮件地址?我们希望弹出一个对话框,其中的电子邮件地址已经预先填写好,这样他们就不必键入正确的电子邮件地址,但似乎唯一的解决办法是让他们重新键入 编辑:以下是其他线程建议的代码(在KindleFire上不起作用): 在KindleFire上,是否可以获取用户的电子邮件地址 对不起,你完全错了 我用于链接到谷歌登录对话框,该对话框显示KindleFire上存在的所有用户。 请遵循以下代码:Android 在KindleFire上,是否有可能获得一个用户';谁的电子邮件地址?,android,kindle-fire,Android,Kindle Fire,讨论了android设备的一般情况,但如果您尝试在KindleFire上运行此代码,您得到的只是用户名。有没有办法获得电子邮件地址?我们希望弹出一个对话框,其中的电子邮件地址已经预先填写好,这样他们就不必键入正确的电子邮件地址,但似乎唯一的解决办法是让他们重新键入 编辑:以下是其他线程建议的代码(在KindleFire上不起作用): 在KindleFire上,是否可以获取用户的电子邮件地址 对不起,你完全错了 我用于链接到谷歌登录对话框,该对话框显示KindleFire上存在的所有用户。 请遵循
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:要使用GoogleAuthUtil类,可能需要google-oauth-client-1.15.0-rc.jar(请使用最新版本)。在我可用的Fire设备上,我做了以下工作:
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;
}
最终静态字符串类型\u GOOGLE=“com.GOOGLE”;
最终的静态字符串类型_AMAZON=“com.AMAZON”;
最终静态字符串AMAZON\u EMAIL=“com.AMAZON.pim”;
公共静态字符串getAccountName(最终上下文){
布尔amazon=TextUtils.equals(Build.MANUFACTURER,“amazon”);
字符串类型=亚马逊?类型\亚马逊:类型\谷歌;
字符串email=null;
试一试{
Account acc[]=AccountManager.get(上下文).getAccountsByType(类型);
如果(附件长度>0){
email=acc[0]。姓名;
对于(int i=0;i0){
//只需返回第一个。。。
email=acc[0]。姓名;
}
}
}捕获(例外情况除外){
例如printStackTrace();
}
回复邮件;
}
这也适用于Google Play设备。您还没有找到解决方案,是吗?我自己也在经历这个问题。废话,我很害怕。。。我的应用程序是由Kindle上的一个用户侧载的,只适用于普通的机器人,遇到了这个问题。。。我想唯一的解决方案是允许用户在不可用的情况下通过电子邮件以外的其他方式进行识别…AccountManager.get(context.getAccountsByType(“com.amazon”);在我的火柴上什么也没有
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;
}