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

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
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?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline MarcoDuff

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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 »

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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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.

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 storico
  • *****
  • Post: 1073
  • Respect: +202
    • Google+
    • marcoduff
    • Mostra profilo
    • MarcoDuff's Blog
  • Dispositivo Android:
    Samsung Galaxy Nexus
  • Play Store ID:
    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!

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
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
Postate il LogCat LogCat LogCat LogCat 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 storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
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.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
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`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
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 storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
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
Postate il LogCat LogCat LogCat LogCat 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..