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"/>
Bom dia!!
Vc colocou a permissão no manifesto… mas está liberado essas permissões para o app?
não, poderia me falar como posso fazer?
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.
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");
}
}
}
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'
Opa… show!! E valeu por postar a solução!!