2013-03-01 89 views
7

我的目標是僅向用戶顯示具有電話號碼的聯繫人,並讓用戶選擇我想本地存儲的少數聯繫人。僅在Android設備中使用ACTION_PICKT意圖顯示聯繫人

我在下面的方法中使用了各種選項來代替ContactsContract.Contacts.CONTENT_URI。但是,我收到很多聯繫人(很多都是垃圾郵件,只有電子郵件ID)。

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

如果我通過ContactsContract.Contacts.CONTENT_URI作爲參數用於上述方法,並在下面的處理程序方法的情況下,字符串[]用於查詢方法作爲投影參數(其被示爲註釋),該方法失敗,並java.lang.IllegalArgumentException異常。如果我在下面的方法中傳遞null,那麼無論我選擇哪種聯繫方式,我都沒有找到任何與電話號碼或電子郵件相關的列。

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

有什麼辦法,只顯示聯繫人可見用戶通常當用戶進入電話簿,並具有電話號碼可用?

我試過通過stackoverflow和其他網站的所有線程,但找不到解決問題的任何解決方案,儘管許多人已經發布了這個問題。我沒有在Android平臺上工作太多,我可能錯過了一些小的細節,我相信必須有一個簡單的方法來實現這一點。

請提出建議。感謝你的幫助。

謝謝。

+0

爲什麼我的ANS幫助? – 2013-03-01 09:49:05

回答

18

請使用下面的代碼

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

不錯.. +1需要你的努力 – 2013-03-02 05:20:04

+0

謝謝。有效。我只是跳到編碼而沒有閱讀很多基礎知識。我使用ContactsContract.Contacts.CONTENT_TYPE,但現在我發現還有其他選項和它們之間的區別。 – Jit 2013-03-02 06:45:57

+1

雖然我沒有看到爲聯繫人返回的電子郵件信息。是否有任何字符串參數可以帶來所有的聯繫信息,包括家庭,手機號碼和電子郵件? – Jit 2013-03-02 06:46:24

1

下面的代碼將做你想做的。

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

使用此:

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* 
相關問題