2013-03-01 9 views
7

Moim celem jest wyświetlanie tylko kontaktów z numerem telefonu do użytkownika i pozwolić użytkownikowi wybrać kilka kontaktów, które chcę przechowywać lokalnie.Wyświetlanie kontaktów tylko z numerami telefonów za pomocą intencji ACTION_PICK w urządzeniu z systemem Android

Użyłem różnych opcji zamiast KontaktyContract.Contacts.CONTENT_URI w poniższej metodzie. Ale dostaję dużo wielu kontaktów (wiele z nich zawiera tylko e-maile).

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); 
       } 
      }); 
    } 

Jeśli przechodzą ContactsContract.Contacts.CONTENT_URI jako parametr do powyższego sposobu, w przypadku programu obsługi poniżej sposób, ciąg [] W sposobie zapytania jako parametry projektora (które są pokazane komentarzem) metoda powoduje java.lang.IllegalArgumentException. Jeśli przekazuję wartość null w poniższej metodzie, to niezależnie od wybranego kontaktu nie znajduję żadnej kolumny dotyczącej numeru telefonu ani adresu e-mail.

@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(); 
       } 
      } 
     } 
    } 

Czy jest jakikolwiek sposób wyświetlenia tylko kontaktów widocznych dla użytkownika, zazwyczaj gdy użytkownik przechodzi do książki telefonicznej i który ma dostępne numery telefonów?

Próbowałem przeglądać wszystkie wątki w stackoverflow i innych witrynach, ale nie mogłem znaleźć żadnego rozwiązania, które rozwiązałoby problem, chociaż wiele osób opublikowało ten problem. Nie współpracowałem zbyt wiele z platformą Android i mogłem pominąć pewne drobne szczegóły i uważam, że musi istnieć łatwy sposób osiągnięcia tego.

Uprzejmie sugerujemy. Doceniam Twoją pomoc.

Dzięki.

+0

nie moje ans pomógł? –

Odpowiedz

18

proszę skorzystać z poniższego kodu

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

dobra .. + 1 jest potrzebna dla twojego wysiłku –

+0

Dzięki. Zadziałało. Po prostu przeskoczyłem do kodowania bez czytania wielu podstaw. Użyłem KontaktyContract.Contacts.CONTENT_TYPE, ale teraz widzę, że są takie inne opcje i różnica między nimi. – Jit

+1

Chociaż nie widziałem informacji o e-mailu zwróconych dla kontaktu. Czy nie ma żadnego parametru ciągowego, który może dostarczyć wszystkich informacji związanych z kontaktem, w tym adresu domowego, numeru telefonu komórkowego i adresu e-mail? – Jit

1

kod uczyni to, co chcesz.

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

Użyj tego:

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* 
Powiązane problemy