2013-03-01 90 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* 
相关问题