[Android] Como pegar a Uri da foto do contato

Oi gente, já estou consguindo pegar o id da foto do contato com o código abaixo, mas estou tendo dificuldades para, a partir desse id, conseguir o local onde está a foto. Já tentei vários códigos mas sem sucesso, será que alguém poderia me ajudar? Agradeço desde já.

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); //CURSOR QUE PEGA TODOS OS CONTATOS
		    
//Checa se o cursor responsável por pegar todos os contatos não veio vazio.
if (cur.getCount() > 0) {
		    	
	//A PARTIR DAQUI, PEGA-SE AS INFOS DE 1 CONTATO POR VEZ
	while (cur.moveToNext()) {
		    contato = new Contato();
		    		
		    //ID DO CONTATO DA VEZ
		    String id = cur.getString(cur.getColumnIndex(ContactsContract.Contacts._ID));
		    		
		    //NOME DO CONTATO DA VEZ
		    String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
		    contato.setNome(name);
		            
		    //PHOTO DO CONTATO DA VEZ
		    String photoId = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.PHOTO_ID));
		    Log.i("contactList", photoId);
		    if(!photoId.equalsIgnoreCase("")) {
		            contato.setImagem(photoId);
		    }

         }
cur.close();
}

O que você quer fazer? Quer acessar o arquivo físico? Quer exibir a foto em sua aplicação?

Nissi,

Queria lhe alertar para o seguinte, em seu código onde você usa o while(cur.moveToNext()) não está “correto” pois desse modo você pode perder contatos já que você não estipulou que ele deve ir do primeiro ao último contato.

Eu recomendo você fazer uma pequena modificação:

cur.moveToFirst();

while(cur.isAfterLast()) {
   // Faça aqui suas requisições!
   
   cur.moveToNext();
}

cur.close();

Eu sei que não tem nada a ver com o que você perguntou, mas é só um aviso. :slight_smile:

Abraço