我的目标是只向用户显示带有电话号码的联系人,让用户选择我想在本地存储的少数联系人.
我在下面的方法中使用了各种选项来代替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作为上述方法的参数传递,并且在下面的处理程序方法的情况下,将查询方法的String []作为投影参数(显示为注释),则该方法将失败并返回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); 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平台上工作太多,我可能错过了一些细微的细节,我相信必须有一个简单的方法来实现这一点.
请建议.感谢您的帮助.
谢谢.
解决方法
请使用以下代码
Intent intent = new Intent(Intent.ACTION_PICK,ContactsContract.Contacts.CONTENT_URI); intent.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE); startActivityForResult(intent,1);