Autore Topic: Recuperare informazioni dai contatti in rubrica  (Letto 89 volte)

Offline maku85

  • Nuovo arrivato
  • *
  • Post: 15
  • Respect: +24
    • Mostra profilo
  • Dispositivo Android:
    Sony Ericsson Xperia X10 Mini
  • Sistema operativo:
    Windows 8, Windows 7,Windows XP, Ubuntu 12.10
Recuperare informazioni dai contatti in rubrica
« il: 23 Aprile 2013, 13:54:38 CEST »
+1
Livello di difficoltà: facile
Versione SDK utilizzata: 2.3.3
Link al file compresso del progetto eclipse: file in allegato

Questo tutorial mostra come poter reperire le informazioni dai propri contatti in rubrica.

Creiamo prima un layout composto in questo esempio da un campo di testo editabile per inserire il dato recuperato e un bottone per accedere alla rubrica
Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_height="wrap_content"  
   android:layout_width="match_parent" >
     
    <EditText  
       android:layout_height="wrap_content"  
       android:id="@+id/invite_email"  
       android:inputType="textEmailAddress"  
       android:layout_width="wrap_content"  
       android:layout_toLeftOf="@+id/email_picker"  
       android:layout_alignParentLeft="true">
    </EditText>  
   
    <Button  
       android:layout_width="wrap_content"  
       android:layout_height="wrap_content"  
       android:id="@+id/email_picker"  
       android:text="browse"  
       android:layout_alignParentRight="true"  
       android:onClick="doLaunchContactPicker">
    </Button>  
   
</RelativeLayout>

Prima di procedere bisogna inserire i permessi per poter accedere alla rubrica. Quindi nel file AndroidManifest.xml bisognerà inserire

Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.READ_CONTACTS"/>
Iniziamo quindi catturando l'azione sul bottone per lanciare l'apertura della rubrica, fattibile tramite gli Intent e il metodo startActivityForResult()

Codice (Java): [Seleziona]
public void doLaunchContactPicker(View view) {  
            Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);  
            startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);  
        }

Cliccando sul bottone ora sarà possibile visualizzare la propria rubrica telefonica. Ora bisogna gestire cosa succede quando si clicca su un contatto. Il risultato si reperisce richiamando il metodo onActivityResult().

Codice (Java): [Seleziona]
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        ...
}

Bisognerà prima verificare se tutto è andato bene testando se il result code è uguale a RESULT_OK (esito positivo).

Codice (Java): [Seleziona]
protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            if (resultCode == RESULT_OK) {  
                switch (requestCode) {  
                        case CONTACT_PICKER_RESULT:
                                ...
                        break;  
                }  
            } else {
                Toast.makeText(this, "Errore.", Toast.LENGTH_LONG).show();
            }  
        }

I dati che ci interessano sono contenuti nell'Intent data e in particolare a noi interessa il tipo Uri

Codice (Java): [Seleziona]
Uri result = data.getData();
Il cui contenuto sarà del tipo

Codice (Java): [Seleziona]
content://com.android.contacts/contacts/lookup/0r7-2C46324E483C324A3A484634/7
di cui a noi interessa solo l'ultimo numero, e per recuperarlo utilizziamo la funzione

Codice (Java): [Seleziona]
String id = result.getLastPathSegment();
Avendo ora l'id del contatto possiamo lanciare una query sulla DB dei contatti per recuperare le informazioni necessarie. In questo esempio recupereremo l'indirizzo email

Codice (Java): [Seleziona]
cursor = getContentResolver().query(Email.CONTENT_URI, null, Email.CONTACT_ID + "=?", new String[]{id}, null);
A questo punto avendo il cursore con i dati di richiesti possiamo recuperarli e inserirli nella casella di testo

Codice (Java): [Seleziona]
email = cursor.getString(emailIdx);
EditText emailEntry = (EditText)findViewById(R.id.invite_email);
emailEntry.setText(email);

Ecco il codice completo

Codice (Java): [Seleziona]
package com.example.tutorial;

import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Email;
import android.provider.ContactsContract.Contacts;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

public class Main extends Activity {
        private Cursor cursor;
        private static final int CONTACT_PICKER_RESULT = 1001;
        private String email;
       
        public void onCreate(Bundle paramBundle) {
                super.onCreate(paramBundle);
                setContentView(R.layout.main);
        }
       
        public void doLaunchContactPicker(View view) {  
            Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI);  
            startActivityForResult(contactPickerIntent, CONTACT_PICKER_RESULT);  
        }
       
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {  
            if (resultCode == RESULT_OK) {  
                switch (requestCode) {  
                        case CONTACT_PICKER_RESULT:
                                cursor = null;
                                email = "";
                                try {
                                        Uri result = data.getData();  
                                        String id = result.getLastPathSegment();
                                        cursor = getContentResolver().query(Email.CONTENT_URI, null, Email.CONTACT_ID + "=?", new String[]{id}, null);
                                        int emailIdx = cursor.getColumnIndex(Email.DATA);
                                        if (cursor.moveToFirst()) {  
                                                email = cursor.getString(emailIdx);
                                        }
                                } catch (Exception e) {
                                        // errore recupero dei dati
                                } finally {
                                        EditText emailEntry = (EditText)findViewById(R.id.invite_email);  
                                        emailEntry.setText(email);
                                        if (email.length() == 0) {  
                                                Toast.makeText(this, "No email per il contatto.", Toast.LENGTH_LONG).show();  
                                        }
                                }
                        break;  
                }  
            } else {
                Toast.makeText(this, "Errore.", Toast.LENGTH_LONG).show();
            }  
        }

}

In questo esempio si è recuperata la mail utilizzando

Codice (Java): [Seleziona]
import android.provider.ContactsContract.CommonDataKinds.Email;
...
cursor = getContentResolver().query(Email.CONTENT_URI, null, Email.CONTACT_ID + "=?", new String[]{id}, null);
int emailIdx = cursor.getColumnIndex(Email.DATA);

Ma si potrebbero recuperare altre informazioni, ad esempio il numero di telefono sostituendo i suddetti con

Codice (Java): [Seleziona]
import android.provider.ContactsContract.CommonDataKinds.Phone;
...
cursor = getContentResolver().query(Phone.CONTENT_URI, null, Phone.CONTACT_ID + "=?", new String[]{id}, null);
int phoneIdx = cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);

sono inoltre anche utilizzabili

Codice (Java): [Seleziona]
import android.provider.ContactsContract.CommonDataKinds.Photo;
import android.provider.ContactsContract.CommonDataKinds.Website;
import android.provider.ContactsContract.CommonDataKinds.Nickname;
import android.provider.ContactsContract.CommonDataKinds.Organization;
import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;

Bibliografia:
« Ultima modifica: 23 Aprile 2013, 14:15:18 CEST da maku85 »
- Il programmatore è colui che risolve in un modo incomprensibile un problema che non sapevi di avere -

Offline Ormet

  • Utente junior
  • **
  • Post: 52
  • Respect: 0
    • Google+
    • Marco Falotico
    • Mostra profilo
  • Dispositivo Android:
    HTC One S
  • Play Store ID:
    Ormet
  • Sistema operativo:
    Windows 7
Re:Recuperare informazioni dai contatti in rubrica
« Risposta #1 il: Ieri alle 19:16 »
0
ottimo, quello che cercavo, ti meriti un bel thanks!
una domanda, qualcuno saprebbe dirmi come posso far compiere un'azione al telefono quando viene collegato al bluetooth?
vorrei che leggesse la rubrica del telefono quando in macchina..