🚀 5.2 Acesse os contatos do telefone
O Android disponibiliza um ContentProvider completo para compartilhar dados de contatos. No entanto, por envolverem dados sensíveis, o acesso exige permissões explícitas do usuário em tempo de execução.
Permissões e Segurança (API 23+)
No Android moderno, declarar a permissão no AndroidManifest.xml é apenas o primeiro passo:
<uses-permission android:name="android.permission.READ_CONTACTS" />Solicitando Permissão via ActivityResultLauncher
A forma recomendada (Premium) de solicitar permissões no Android Studio 2023.1 é através do ActivityResultLauncher. Isso evita o uso dos métodos depreciados onRequestPermissionsResult.
// Na Activity (Java 17)
private final var requestPermissionLauncher =
registerForActivityResult(new RequestPermission(), isGranted -> {
if (isGranted) {
consultarContatos();
} else {
Toast.makeText(this, "Permissão negada", Toast.LENGTH_SHORT).show();
}
});
private void verificarPermissao() {
if (ContextCompat.checkSelfPermission(this, READ_CONTACTS) == GRANTED) {
consultarContatos();
} else {
requestPermissionLauncher.launch(READ_CONTACTS);
}
}Executando a Consulta com ContentResolver
Uma vez obtida a permissão, utilizamos o ContentResolver para buscar os nomes dos contatos:
private void consultarContatos() {
var uri = ContactsContract.Contacts.CONTENT_URI;
var projection = new String[] { ContactsContract.Contacts.DISPLAY_NAME };
// Executando a query através do ContentResolver
var cursor = getContentResolver().query(uri, projection, null, null, null);
if (cursor != null && cursor.moveToFirst()) {
do {
var nome = cursor.getString(0);
Log.d("BOAVIAGEM", "Contato: " + nome);
} while (cursor.moveToNext());
cursor.close();
}
}IMPORTANT
Projeções Eficientes: Sempre especifique as colunas desejadas no parâmetro
projection. Solicitar todas as colunas (null) é ineficiente e consome memória desnecessária do dispositivo.
TIP
Para buscas parciais, utilize a URI de filtro:
Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(nomePesquisa))Isso processa a busca de forma otimizada dentro do provedor de contatos do sistema.