2013-03-01 14 views
7

Il mio obiettivo è visualizzare solo i contatti con numero di telefono per l'utente e consentire all'utente di selezionare alcuni contatti che voglio memorizzare localmente.Visualizzazione di contatti solo con numeri di telefono utilizzando ACTION_PICK intento nel dispositivo Android

Ho usato varie opzioni al posto di ContactsContract.Contacts.CONTENT_URI nel metodo seguente. Ma sto ricevendo molti dei contatti (molti sono spazzatura con solo e-mail) visualizzati.

public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 

     setContentView(R.layout.contact_selector); 

     ((Button)findViewById(R.id.btnphonecontactlist)).setOnClickListener(new OnClickListener() { 

     @Override 
     public void onClick(View v) { 
      // TODO Auto-generated method stub 
      Intent contactIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
      startActivityForResult(contactIntent, 1); 
       } 
      }); 
    } 

Se passo ContactsContract.Contacts.CONTENT_URI come parametro per il metodo di cui sopra e, in caso di sotto metodo del gestore, lo String [] per il metodo query come parametri di proiezione (che vengono visualizzati commentato), il metodo non riesce con java.lang.IllegalArgumentException. Se passo null in seguito al metodo, quindi qualunque contatto seleziono, non trovo nessuna colonna relativa al numero di telefono o email.

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 

     if(data != null) 
     { 
      Uri uri = data.getData(); 

      if(uri != null) 
      { 
       Cursor c = null; 

       try 
       { 
        c = getContentResolver().query(uri, null 
               // new String[] { 
          //ContactsContract.CommonDataKinds.Phone.NUMBER, 
          //ContactsContract.CommonDataKinds.Phone.TYPE}, 
          , null, null, null); 

        if(c != null && c.moveToFirst()) 
        { 
         String number = c.getString(0); 
         String type = c.getString(1); 
        }    
       } 
       finally 
       { 
        if(c != null && !c.isClosed()) 
         c.close(); 
       } 
      } 
     } 
    } 

Esiste un modo per visualizzare solo i contatti visibili per l'utente di solito quando l'utente va a rubrica e che ha i numeri di telefono a disposizione?

Ho provato a esaminare tutti i thread in StackOverflow e altri siti, ma non sono riuscito a trovare alcuna soluzione che risolva il problema, sebbene molte persone abbiano pubblicato il problema. Non ho lavorato molto con la piattaforma Android e potrei essermi perso alcuni dettagli minori e credo che ci debba essere un modo semplice per raggiungere questo obiettivo.

Si prega di suggerire. Apprezzo il tuo aiuto.

Grazie.

+0

ha aiutato la mia ans? –

risposta

18

Si prega di utilizzare il codice

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI); 
    intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
    startActivityForResult(intent, 1); 
+0

buona .. + 1 è necessario per il tuo sforzo –

+0

Grazie. Ha funzionato. Ho appena saltato sulla programmazione senza leggere molte delle nozioni di base. Ho usato ContactsContract.Contacts.CONTENT_TYPE ma ora vedo che ci sono altre opzioni e la differenza tra loro. – Jit

+1

Anche se non ho visto le informazioni e-mail restituite per il contatto. Non ci sono parametri di stringa che possono portare tutte le informazioni relative ai contatti, inclusi casa, numeri di cellulare ed e-mail? – Jit

1

codice seguente fare quello che vuoi.

Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
startActivityForResult(Intent.createChooser(intent, "Contact"), PICK_CONTACT); 
1
Uri uri = Uri.parse("content://contacts"); 
Intent intent = new Intent(Intent.ACTION_PICK, uri); 
intent.setType(Phone.CONTENT_TYPE); 
startActivityForResult(intent, REQUEST_CODE); 
0

Utilizzare questa:

Intent intent = new Intent(Intent.ACTION_PICK, Uri.parse("content://contacts/people")); 
intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); 
startActivityForResult(intent, 1); 
2
*-> Add a permission to read contacts data to your application manifest. 

<uses-permission android:name="android.permission.READ_CONTACTS"/> 

-> Use Intent.ACTION_PICK in your Activity 

Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, 
       ContactsContract.CommonDataKinds.Phone.CONTENT_URI); 
     startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT); 

-> Then Override the onActivityResult() and retrieve the ID,Phone number and Name in the data. 

@Override 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     // check whether the result is ok 
     if (resultCode == RESULT_OK) { 
      // Check for the request code, we might be usign multiple startActivityForReslut 
      switch (requestCode) { 
      case RESULT_PICK_CONTACT: 
       Cursor cursor = null; 
     try { 
      String phoneNo = null ; 
      String name = null;   
      Uri uri = data.getData();    
      cursor = getContentResolver().query(uri, null, null, null, null); 
      cursor.moveToFirst();   
      int phoneIndex =cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER); 
      phoneNo = cursor.getString(phoneIndex); 

      textView2.setText(phoneNo); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
       break; 
      } 
     } else { 
      Log.e("MainActivity", "Failed to pick contact"); 
     } 
    } 

This will work check it out* 
Problemi correlati