GUJ Discussões   :   últimos tópicos   |   categorias   |   GUJ Respostas

Account Manager retorna lista vazia


#1

Estou tentando usar o Account Manager para obter uma lista das conta cadastrada no smartphone, mas método retorna vazio. Estou usando a API 26, alguem pode me ajudar?

método que esta na activity

       Pattern emailPattern = Patterns.EMAIL_ADDRESS; // API level 8+
        AccountManager accountManager = AccountManager.get(this);
         Account[] accounts = accountManager.getAccounts();

    for (Account account : accounts) {
        if (emailPattern.matcher(account.name).matches()) {
            String possibleEmail = account.name;
            android.util.Log.i("CHEOK", "possibleEmail = " + possibleEmail);
            editTextEmail.setText(possibleEmail);
        }

    }

Manifest possui essas permissões

 <uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
<uses-permission android:name="android.permission.USE_CREDENTIALS"/>
<uses-permission android:name="android.permission.AUTHENTICATE_ACCOUNTS"/>

#2

Bom dia!!

Vc colocou a permissão no manifesto… mas está liberado essas permissões para o app?


#3

não, poderia me falar como posso fazer?


#4

Então, o certo é solicitar a permissão em runtime, como mostra esse exemplo:

Mas para você testar, pode entrar nas configurações do APP e liberar a permissão manualmente.


#5

adicionei a permissão manual e tambem em tempo de execução mas ainda retorna vazio

ActivityCompat.requestPermissions( this, new String[]
                {  android.Manifest.permission.GET_ACCOUNTS  },4 );

 @Override
public void onRequestPermissionsResult(int requestCode, String permissions[], int[] 
grantResults) {
    super.onRequestPermissionsResult(requestCode, permissions, grantResults);
    switch (requestCode) {
        case requestcode:
            if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                String emailAddr = buscarEmail(getApplicationContext());
                ShowMessage(emailAddr);

            } else {
                ShowMessage("Permission Denied");
            }
    }
}

#6

Resolvi o problema usando AccountPicker já que necessito apenas de contas google e também não necessita de permissão, apenas que o usuário selecione a conta que ira usar.

no método onCreate da activity

  try {
        Intent intent = AccountPicker.newChooseAccountIntent(null, null,
                new String[] { GoogleAuthUtil.GOOGLE_ACCOUNT_TYPE }, false, null, null, null, null);
        startActivityForResult(intent, REQUEST_CODE_EMAIL);
    } catch (ActivityNotFoundException e) {
        //
    }

método para retornar as contas.

 @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    if (requestCode == REQUEST_CODE_EMAIL && resultCode == RESULT_OK) {
        String accountName = data.getStringExtra(AccountManager.KEY_ACCOUNT_NAME);
        editTextEmail.setText(accountName);
        ediTextConfEmail.setText(accountName);
    }
}

No build.gradle (módulo app), dependencies:

implementation 'com.google.android.gms:play-services-auth:10.2.0'

#7

Opa… show!! E valeu por postar a solução!!