Как найти учетную запись Gmail, связанную с Android Market?

Я знаю, как найти учетные записи (которые будут содержать идентификаторы электронной почты электронной почты gmail) и как фильтровать учетную запись gmail.

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;

Что я хочу знать, как найти учетную запись gmail, связанную с Android Market? Если вы попытаетесь удалить учетную запись gmail с телефона Android, вы получите это сообщение enter image description here

но если вы попытаетесь удалить учетную запись gmail, связанную с Android Market, вы получите следующее сообщение (если вы нажмете удалить учетную запись в предыдущем сообщении).

enter image description here

Спасибо за помощь.

Ответ 1

Диалог

enter image description here

вызвано реализацией AbstractAccountAuthenticator # getAccountRemovalAllowed в аутентификаторе учетной записи Google.

Поскольку вызов реализаций AbstractAccountAuthenticator напрямую предотвращается только с помощью системного разрешения android.permission.ACCOUNT_MANAGER, вам будет сложно найти это самостоятельно.

Ответ 2

Из того, что я нашел, первая учетная запись google, добавленная в устройство, является основным адресом google, который связан с рынком Android. Кроме того, мы получаем учетные записи google в том порядке, в котором оно было добавлено в устройство. Таким образом, учетные записи [0] будут первым добавленным идентификатором электронной почты.

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

Опять же, я не уверен в этом. Вы должны сами проверить его с помощью различных сценариев.

Ответ 3

"Ассоциация" будет управляться приложением Android Market/Google Play, и я не думаю, что у него есть какой-либо публичный API, который расскажет вам, какие учетные записи он использует. Кроме того, в последних версиях он может использовать несколько учетных записей, поэтому потенциально любая учетная запись Google на телефоне может использоваться с приложением Market/Play Store.

Почему именно вы пытаетесь это сделать? Уметь безопасно удалять учетные записи? Пользователь получит соответствующее сообщение об ошибке, чтобы они могли решить, удалить ли аккаунт или нет.