在引入Android 3.0之前,手机上注册的第一个com.google
帐户是主要帐户,并且是Android Market使用的唯一帐户。
在Android 3.0及以上版本的设备上,我不能再依赖于这个(Account[0]
)来获取客户的电子邮件地址。
有没有一种方法可以确定当前正在进行购买的com.google
帐户是哪个?
(我所需要的只是帐户类型为com.google
的帐户数组中的索引。一旦我获得相关的索引,我就可以获取电子邮件地址)
在引入Android 3.0之前,手机上注册的第一个com.google
帐户是主要帐户,并且是Android Market使用的唯一帐户。
在Android 3.0及以上版本的设备上,我不能再依赖于这个(Account[0]
)来获取客户的电子邮件地址。
有没有一种方法可以确定当前正在进行购买的com.google
帐户是哪个?
(我所需要的只是帐户类型为com.google
的帐户数组中的索引。一旦我获得相关的索引,我就可以获取电子邮件地址)
恐怕这是不可能的。从我找到的资料来看,似乎进行应用内购买的帐户是用于安装该应用程序的帐户,而您并不知道该帐户。我猜在已经root的手机上可以从Play商店应用程序数据库中读取它。
看起来甚至在使用Google Play Android Developer API完成购买后,也无法找到购买帐户,不确定为什么会这样。
如果您碰巧找到了,请告诉我。
我刚刚进行了一次快速的谷歌搜索,并在这个网站这里找到了这个。
您可以使用AccountManager.getAccounts
或AccountManager.getAccountsByType
来获取设备上所有帐户名称的列表。幸运的是,对于某些帐户类型(包括com.google
),帐户名称是电子邮件地址。以下是示例片段。
Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+ Account[] accounts = AccountManager.get(context).getAccounts(); for (Account account : accounts) {
if (emailPattern.matcher(account.name).matches()) {
String possibleEmail = account.name;
...
} }
GET_ACCOUNTS
权限:<uses-permission android:name="android.permission.GET_ACCOUNTS" />
关于如何使用AccountManager
,可以在SDK中的联系人管理器示例代码中找到更多信息。
名字和姓氏 >> Java 代码?
电子邮件地址代码
Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
Account[] accounts = AccountManager.get(getApplicationContext()).getAccounts();
for (Account account : accounts) {
if (account.type.equals("com.google")) {
email = account.name.toString();
break;
} else if (emailPattern.matcher(account.name).matches()) {
email = account.name.toString();
}
}
import android.provider.ContactsContract;
AccountManager am = AccountManager.get(this);
Account[] accounts = am.getAccountsByType("com.google");
//you can set current sync account..
boolean syncEnabled = ContentResolver.getSyncAutomatically(accounts[0], ContactsContract.AUTHORITY);