Autore Topic: Ottenere il numero di telefono di un contatto  (Letto 2124 volte)

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Ottenere il numero di telefono di un contatto
« il: 15 Gennaio 2012, 23:15:08 CET »
0
Salve, stò cercando di creare un'applicazione per ottenere il numero di telefono di un contatto selezionato dalla rubrica, ma il problema è che me lo restituisce esatto solo per il primo e poi solo per i dispari, ma prendendoli a caso, ma non capisco perchè dato che in "teoria" il tutto dovrebbe funzionare.

Non ottengo nessun errore nel logcat.

Posto il listato.

Codice (Java): [Seleziona]
import android.app.Activity;
import android.os.Bundle;

import android.content.Intent;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

import android.net.Uri;
import android.database.Cursor;

public class ContactsProjectActivity extends Activity {
       
        // Identifica la chiamata all'attività di scelta del contatto
        private final static int CHOOSE_CONTACT_CODE = 0;
       
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.main);
               
                // Gestiamo il pulsante relativo ai contatti
                Button pickContactButton = (Button) findViewById(R.id.pickContactButton);
                pickContactButton.setOnClickListener(new OnClickListener() {

                        @Override
                        public void onClick(View v) {
                                // Creiamo un Intent di editazione di un contatto
                                // Caso sbagliato di utilizzo di ACTION_VIEW
                                //Intent intent = new Intent(Intent.ACTION_VIEW);
                                // Caso corretto di utilizzo di ACTION_PICK
                                Intent intent = new Intent(Intent.ACTION_PICK);
                                // Impostiamo l'URI relativo alla scelta del contatto
                                intent.setData(android.provider.ContactsContract.Contacts.CONTENT_URI);
                                startActivityForResult(intent, CHOOSE_CONTACT_CODE);
                        }

                });
    }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode,resultCode,data);
                if(requestCode==CHOOSE_CONTACT_CODE){
                        // Riferimento alla TextView
                        TextView NumeroTelefono = (TextView)findViewById(R.id.output);
                        // Si tratta dell'attività che avevamo invocato. Gestiamo quindi
                        // i diversi casi
                        if(resultCode == Activity.RESULT_OK){
                                // Risultato corretto per cui visualizziamo le informazioni di data nella TextView
                               
                               
                                NumeroTelefono.setText(data.getData().toString()+"\n");

                                String NumeroContattoDellaLista = data.getData().getLastPathSegment();                         
                                Uri contatto = Uri.withAppendedPath(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI, NumeroContattoDellaLista);                        
                                Cursor phoneCursor = managedQuery(contatto, null, null, null, null);
                                //gira la lista dei contatti
                                for (phoneCursor.moveToFirst(); !phoneCursor.isAfterLast(); phoneCursor.moveToNext()) {
                                        // Recupera il numero di telefono                        
                                        String NumeroDiTelefono = phoneCursor.getString(phoneCursor.getColumnIndexOrThrow(android.provider.ContactsContract.CommonDataKinds.Phone.NUMBER));                                                        
                               
                                        NumeroTelefono.append("id : "+NumeroContattoDellaLista+" Tel : "+NumeroDiTelefono);
                                }

                               
                               
                        }
                }
        }

        @Override
        public void finishActivityFromChild(Activity child, int requestCode) {
                super.finishActivityFromChild(child, requestCode);
        }

        @Override
        public void finishFromChild(Activity child) {
                super.finishFromChild(child);
        }
       
}

interfaccia

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:orientation="vertical"
   android:layout_width="fill_parent"
   android:layout_height="fill_parent"
   >
<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/output"></TextView><Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/pickContactButton" android:text="@string/pick_contact"></Button>
</LinearLayout>

Permessi nel Manifest

Codice (XML): [Seleziona]
<uses-permission android:name="android.permission.READ_CONTACTS" />
<uses-permission android:name="android.permission.WRITE_CONTACTS" />

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 il numero di telefono di un contatto
« Risposta #1 il: 16 Gennaio 2012, 16:05:57 CET »
0
Guarda qui, c'è proprio l'esempio su come prendere il numero di telefono di un contatto: Content Providers | Android Developers

Offline systemgvp

  • Nuovo arrivato
  • *
  • Post: 49
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    Ideos
  • Play Store ID:
    systemgvp
  • Sistema operativo:
    Windows 7
Re:Ottenere il numero di telefono di un contatto
« Risposta #2 il: 16 Gennaio 2012, 23:56:05 CET »
0
ho provato a capire come funzionano quei listati, ma niente, potresti darmi una mano? credo che il problema sia qualcosa di poco conto che trascuro

Offline gfkat

  • Nuovo arrivato
  • *
  • Post: 6
  • Respect: 0
    • Mostra profilo
Re:Ottenere il numero di telefono di un contatto
« Risposta #3 il: 18 Febbraio 2012, 11:05:22 CET »
0
Ciao systemgvp,
non saprei dirti come mai il tuo metodo non funziona,
però se vuoi ti posto il mio codice che funziona a dovere con nome, numero ed immagine. Sull'immagine ci ho lavorato molto e difatti ho scoperto che se l'immagine è stata inserita nel database dei contatti dall'applicazione ufficiale di Facebook, non c'è modo di recuperarla, non si capisce se è un bug dell'applicazione, o se è una cosa voluta appositamente. Ma passiamo ai fatti.

Innanzi tutto ho un metodo che mi avvia l'intent di selezione dei contatti:

Codice (Java): [Seleziona]
private void selectContact()
        {
                // This intent will fire up the contact picker dialog
                Intent intent = new Intent(Intent.ACTION_PICK,
                                ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
                startActivityForResult(intent, REQUEST_CONTACTPICKER);
        }

e poi sull'onActivityResult vado a riempire le varie EditText ed ImageView che ho, nel tuo caso potresti passarlo semplicemente su variabile:

Codice (Java): [Seleziona]
@Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);  
                if (requestCode == REQUEST_CONTACTPICKER)
                {          
                        if(resultCode == RESULT_OK)
                        {
                                //long id = 0;
                                Uri contentUri = data.getData();
                                String contactId = contentUri.getLastPathSegment();
                                Cursor cursor = getContentResolver().query(  
                                                Phone.CONTENT_URI, null,  
                                                Phone._ID + "=?",       // < - Note, not CONTACT_ID!
                                                new String[]{contactId}, null);

                                startManagingCursor(cursor);
                                Boolean numbersExist = cursor.moveToFirst();          
                                int phoneNumberColumnIndex = cursor.getColumnIndex(Phone.NUMBER);
                                String phoneNumber = "";
                                String name = "";
                                while (numbersExist)
                                {
                                        phoneNumber = cursor.getString(phoneNumberColumnIndex);
                                        name = cursor.getString(cursor.getColumnIndex(Phone.DISPLAY_NAME));

                                        //id = cursor.getLong(cursor.getColumnIndex(Phone._ID));
                                        phoneNumber = phoneNumber.trim();  
                                        numbersExist = cursor.moveToNext();

                                        stopManagingCursor(cursor);    
                                }

                                if (!phoneNumber.equals(""))
                                {
                                        if(phoneNumber.contains("+"))
                                                phoneNumber = phoneNumber.substring(3); //toglie il +39 dal numero
                                        friendUserNumber.setText(phoneNumber);
                                        friendUserName.setText(name);
                                        image = getFacebookPhoto(phoneNumber);
                                        friendUserImage.setImageBitmap(image);

                                } // phoneNumber != ""
                        } // Result Code = RESULT_OK
                } // Request Code = REQUEST_CONTACTPICER
        }       // end function  


Per quanto riguarda getFacebookPhoto(phoneNumber); ti lascio il codice nel caso te voglia implementarlo:

Codice (Java): [Seleziona]
public Bitmap getFacebookPhoto(String phoneNumber) {
                Uri phoneUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phoneNumber));
                Log.v("addFriend.getFacebookPhoto","phoneUri:" + phoneUri.toString());

                Uri photoUri = null;
                ContentResolver cr = this.getContentResolver();
                Cursor contact = cr.query(phoneUri,
                                new String[] { ContactsContract.Contacts._ID }, null, null, null);

                if (contact.moveToFirst()) {
                        long userId = contact.getLong(contact.getColumnIndex(ContactsContract.Contacts._ID));
                        Log.v("addFriend.getFacebookPhoto","userId:" + Long.toString(userId));
                        photoUri = ContentUris.withAppendedId(ContactsContract.Contacts.CONTENT_URI, userId);
                        Log.v("addFriend.getFacebookPhoto","photoUri:" + photoUri.toString());

                }
                else {
                        Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image);
                        Log.v("addFriend.getFacebookPhoto","Error-1");
                        return defaultPhoto;
                }

                InputStream input = ContactsContract.Contacts.openContactPhotoInputStream(cr, photoUri);
                if (input != null)
                {
                        return BitmapFactory.decodeStream(input);
                }else
                {
                        Bitmap defaultPhoto = BitmapFactory.decodeResource(getResources(), R.drawable.sample_image);
                        Log.v("addFriend.getFacebookPhoto","Error-2");

                        return defaultPhoto;
                }

        }

Spero che questo ti sia di aiuto,
Ciao,
Luciano.

Offline AngelMagli

  • Nuovo arrivato
  • *
  • Post: 18
  • Respect: 0
    • Mostra profilo
Re:Ottenere il numero di telefono di un contatto
« Risposta #4 il: 04 Marzo 2012, 21:23:28 CET »
0
Ciao, ma per prendere solo il numero del telefonino anziché tutto sai come fare?
oppure per far comparire una finestra che dia la possibilità di scegliere quale numero di telefono selezionare, sai come posso procedere?
Grazie mille
Saluti
Angelo

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3487
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
R: Re:Ottenere il numero di telefono di un contatto
« Risposta #5 il: 04 Marzo 2012, 22:59:50 CET »
0
Ciao, ma per prendere solo il numero del telefonino anziché tutto sai come fare?
oppure per far comparire una finestra che dia la possibilità di scegliere quale numero di telefono selezionare, sai come posso procedere?
Grazie mille
Saluti
Angelo

Ciao, per favore non fare cross-posting.

Inviato dal mio HTC Desire usando Tapatalk