Autore Topic: Ottenere nome contatto avendo il numero  (Letto 468 volte)

Offline blackgin

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 942
  • Respect: +100
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
    • CommaBit
  • Dispositivo Android:
    Galaxy Nexus
  • Market Developer Name:
    CommaBit
  • Sistema operativo:
    Mac OSX
Ottenere nome contatto avendo il numero
« il: 14 Luglio 2010, 13:14:08 CEST »
0
Se ho il numero di telefono, come posso ottenere il nome del contatto corrispondente?
Fate i bravi bimbi, postatelo il LogCat

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 914
  • Respect: +150
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Ottenere nome contatto avendo il numero
« Risposta #1 il: 14 Luglio 2010, 15:23:30 CEST »
+1
Prova questo:

Codice (Java): [Seleziona]
public class AndroidTestActivity extends ListActivity {
    private static final String PHONE_NUMBER = "xxxxxxx"; // TODO: Inserisci qui il numero da cercare
       
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
        String phoneNumberReverse = new StringBuffer(PHONE_NUMBER).reverse().toString();
        ContentResolver cr = this.getContentResolver();
        Cursor cur = cr.query(
                        CommonDataKinds.Phone.CONTENT_URI,
                        new String[] {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, CommonDataKinds.Phone.NUMBER},
                        CommonDataKinds.Phone.DATA4+" = ?",
                        new String[] {phoneNumberReverse},
                        null);
        startManagingCursor(cur);
        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                        this,
                        android.R.layout.simple_list_item_2,
                        cur,
                        new String[] {ContactsContract.Contacts.DISPLAY_NAME, CommonDataKinds.Phone.NUMBER},
                        new int[] {android.R.id.text1,android.R.id.text2});
        this.setListAdapter(adapter);
    }
}

Piccola nota su "CommonDataKinds.Phone.DATA4".
Ho notato che il formato del numero CommonDataKinds.Phone.NUMBER (ovvero la colonna "data1") è dipendente dalla lingua selezionata. Ad esempio il numero 3331234567 in inglese viene formattato come 333-123-4567 nella colonna data1. Quindi dovresti fare un test inserendo il numero formattato in quel modo.
Per ovviare a questo ho notato che nella colonna data4 viene formattato il numero senza caratteri speciali ma al contrario (ecco il motivo di "phoneNumberReverse")!  o_O

Penso che questo pezzettino di codice si possa ottimizzare parecchio (specialmente questa gestione del numero), se avete idee postatele pure!

Ciau!  :-P
« Ultima modifica: 14 Luglio 2010, 18:10:42 CEST da JD, Reason: Usate i bbcode java e xml!! xD »
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline dersew

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32A
  • Sistema operativo:
    ubuntu 10.04
Re:Ottenere nome contatto avendo il numero
« Risposta #2 il: 15 Luglio 2010, 21:20:23 CEST »
0
fantastico, ma come si fa ad avere il numero? volevo provare a realizzare qualcosa ma nn sto riuscendo a ricavare il numero.. :(

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 914
  • Respect: +150
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Ottenere nome contatto avendo il numero
« Risposta #3 il: 16 Luglio 2010, 10:37:12 CEST »
0
Forse non ho capito bene...

1. Hai il numero e ti serve il nome associato
2. Hai il nome e ti serve il numero associato

 o_O

Il codice che ti ho postato serve alla 1.
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline dersew

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32A
  • Sistema operativo:
    ubuntu 10.04
Re:Ottenere nome contatto avendo il numero
« Risposta #4 il: 16 Luglio 2010, 14:32:13 CEST »
0
Il primo post nn é stato scritto da me..io ho semplicemente detto che è un bello script e se sapevi come ricavare anche il numero.. :-)

Offline MarcoDuff

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 914
  • Respect: +150
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    HTC Desire
  • Market Developer Name:
    MarcoDuff
  • Sistema operativo:
    Windows 7
Re:Ottenere nome contatto avendo il numero
« Risposta #5 il: 19 Luglio 2010, 10:48:56 CEST »
+1
Ops... non mi ero accorto che eravate persone diverse! :-[

Il codice è questo:
Codice (Java): [Seleziona]
public class AndroidTestActivity extends ListActivity {
        private final int ACTIVITY_RESULT_PICK_PHONE = 0x1;
   
        @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
       
                Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
                intent.setType(CommonDataKinds.Phone.CONTENT_ITEM_TYPE);
                startActivityForResult(intent, ACTIVITY_RESULT_PICK_PHONE);
    }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                if(resultCode==RESULT_OK) {
                        switch (requestCode) {
                        case ACTIVITY_RESULT_PICK_PHONE:
                                Uri uri = data.getData();
                                Cursor cur = managedQuery(
                                                uri,
                                                new String[] {ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, CommonDataKinds.Phone.NUMBER},
                                                null,
                                                null,
                                                null);
                        startManagingCursor(cur);
                        SimpleCursorAdapter adapter = new SimpleCursorAdapter(
                                        this,
                                        android.R.layout.simple_list_item_2,
                                        cur,
                                        new String[] {ContactsContract.Contacts.DISPLAY_NAME, CommonDataKinds.Phone.NUMBER},
                                        new int[] {android.R.id.text1,android.R.id.text2});
                        this.setListAdapter(adapter);
                        stopManagingCursor(cur);
                                break;
                        default:
                                break;
                        }
                }
        }
}

Consiste in due passi:
  • Faccio partire l'attività per la visualizzazione di tutti i numeri in rubrica (tramite Intent)
  • Una volta selezionato il numero interessato, si ritorna alla nostra attività che si occupa di recuperarlo tramite il Content Provider

Ovviamente, rispetto a quello che serve a te, puoi eliminare il primo passo (se già possiedi il numero e devi soltanto risalire alla persona).

Ciao!
Le mie Applicazioni Android | Il mio Blog

Io faccio parte del Gruppo AndDev.it LOGTFO, tu no? Allora GTFO!
Quando un utente fornisce una risposta utile si può ringraziarlo premendo il tasto  alla destra del titolo del post. (Ricky` rulez)

Offline blackgin

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 942
  • Respect: +100
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
    • CommaBit
  • Dispositivo Android:
    Galaxy Nexus
  • Market Developer Name:
    CommaBit
  • Sistema operativo:
    Mac OSX
Re:Ottenere nome contatto avendo il numero
« Risposta #6 il: 19 Luglio 2010, 19:56:23 CEST »
0
Alla fine avevo giá risolto ^^.
Ho guardato il codice di un'app su google code che risolve in questo modo (l'app é quella che visualizza un popup quando arriva un messaggio, ma non é SmsPopup).
Codice (Java): [Seleziona]
        private static long idFromNumber(Context context, String number) {
        // Get the base URI
        Uri myPerson = Uri.withAppendedPath(Phones.CONTENT_FILTER_URL, Uri.encode(number));

        // Column to return
        String[] projection = new String[] { Phones.PERSON_ID };
        Cursor cursor = context.getContentResolver().query(myPerson, projection, null, null, null);

        if (cursor.moveToFirst()) {
            int  idColumn = cursor.getColumnIndex(Phones.PERSON_ID);
            Long id = cursor.getLong(idColumn);

            cursor.close();

            return id;
        }

        cursor.close();

        return NO_ID;
        }


Codice (Java): [Seleziona]
        private static String nameFromId(Context context, long id) {

        // Get the base URI
        Uri myPerson = ContentUris.withAppendedId(People.CONTENT_URI, id);

        // Column to return
        String[] projection = new String[] { People.NAME };
        Cursor cursor = context.getContentResolver().query(myPerson, projection, null, null, null);

        if (cursor != null) {
            try {
                if (cursor.getCount() > 0) {
                    cursor.moveToFirst();

                    int nameColumn = cursor.getColumnIndex(People.NAME);
                    String name = cursor.getString(nameColumn);

                    cursor.close();

                    return name;
                }
            } finally {
                cursor.close();
            }
        }
               
                return null;
        }

La prima ottiene l'id avendo il numero, e la seconda ottiene il nome avendo l'id. Fanno parte di una classe CustomContact appositamente creata
Fate i bravi bimbi, postatelo il LogCat

Offline dersew

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32A
  • Sistema operativo:
    ubuntu 10.04
Re:Ottenere nome contatto avendo il numero
« Risposta #7 il: 19 Luglio 2010, 21:41:56 CEST »
0
nn sto capendo bene ...ragazzi, se io volessi semplicemente fare un'app ke sta in background e ke quando ricevo una chiamata mi faccia comparire un toast o una notifica dicendomi il numero di chi mi chiama (poi successivamente vedrò di far comparire il nome se è in rubrica)

Offline blackgin

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 942
  • Respect: +100
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
    • CommaBit
  • Dispositivo Android:
    Galaxy Nexus
  • Market Developer Name:
    CommaBit
  • Sistema operativo:
    Mac OSX
Re:Ottenere nome contatto avendo il numero
« Risposta #8 il: 20 Luglio 2010, 08:20:47 CEST »
0
Devi implementare il receiver apposito per la chiamata e appena la ricevi dovresti giá riuscire ad ottenere il numero.
Fate i bravi bimbi, postatelo il LogCat

Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:Ottenere nome contatto avendo il numero
« Risposta #9 il: 20 Luglio 2010, 10:39:51 CEST »
0
nn sto capendo bene ...ragazzi, se io volessi semplicemente fare un'app ke sta in background e ke quando ricevo una chiamata mi faccia comparire un toast o una notifica dicendomi il numero di chi mi chiama (poi successivamente vedrò di far comparire il nome se è in rubrica)

Ma cosa te ne fai? :D Lo vedi già nel dialer della chiamata :D

Offline dersew

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32A
  • Sistema operativo:
    ubuntu 10.04
Re:Ottenere nome contatto avendo il numero
« Risposta #10 il: 20 Luglio 2010, 14:34:07 CEST »
0
mi serve mi serve..voglio realizzare un'app particolare..ma prima di dirlo in giro voglio realizzarla a publicarla nel market :) di conseguenza mi serve avere il numero di telefono del kiamante..ma sto uscendo pazzo per averlo, nn trovo nulla..o cmq poco..e quel poco nn basta..

Offline Ricky`

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 2466
  • Respect: +339
    • Google+
    • rciovati
    • Mostra profilo
  • Dispositivo Android:
    HTC Desire
  • Sistema operativo:
    OS X Lion
Re:Ottenere nome contatto avendo il numero
« Risposta #11 il: 20 Luglio 2010, 14:41:29 CEST »
0
Dai un occhio al progetto allegato. Il listener viene registrato al boot, percui dopo l'installazione devi riavviare il cell.

Offline blackgin

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 942
  • Respect: +100
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
    • CommaBit
  • Dispositivo Android:
    Galaxy Nexus
  • Market Developer Name:
    CommaBit
  • Sistema operativo:
    Mac OSX
Re:Ottenere nome contatto avendo il numero
« Risposta #12 il: 20 Luglio 2010, 15:39:04 CEST »
0
Per ottenere quello degli sms é semplice. Si prende l'sms ricevuto e si invoca il metodo che restituisce il numero chiamante. Credo che dovrebbe essere cosí anche per la chiamata, a maggior ragione
Fate i bravi bimbi, postatelo il LogCat

Offline dersew

  • Nuovo arrivato
  • *
  • Post: 28
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic 32A
  • Sistema operativo:
    ubuntu 10.04
Re:Ottenere nome contatto avendo il numero
« Risposta #13 il: 21 Luglio 2010, 14:31:11 CEST »
0
sto provando il codice dell'allegato..ma nn riesco a trovare nulla visualizzato nel logcat.. purtroppo ho poco tempo a mia disp in questo periodo quindi sono un pò lentuccio..vedrò cosa riuscirò a fare..