android - 从 android 应用程序的联系人列表中选择一个号码和姓名

标签 android android-contacts

我想从我的联系人列表中选择一个联系人及其号码。 几周以来,我阅读了很多解决方案和研究,但所有文章都无法正常工作。 一些代码如下:

Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
startActivityForResult(intent, PICK_CONTACT);

//在 Activity 结果中:

if (resultCode == Activity.RESULT_OK) {
            Uri contactData = data.getData();
            Cursor c =  managedQuery(contactData, null, null, null, null);
            if (c.moveToFirst()) {
              String name = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
              tv1.setText(name);
            }
          }

或此代码用于获取所有联系人,但我无法获得联系人数量:

String[] contacts = new String[] {People.NAME, People.NUMBER};       
Uri contentUri = People.CONTENT_URI;        
Cursor cursor = managedQuery(contentUri, contacts, null, null, null);                 
String textContacts = "";                 
if (cursor.moveToFirst()) {         
    String myname = null;         
    String mynumber = null;         
    do {          
        textContacts = textContacts + cursor.getString(cursor.getColumnIndex(People.NAME)) + " : " + cursor.getString(cursor.getColumnIndex(People.NUMBER)) + "\n";         
    } while (cursor.moveToNext()); 
tv1.setText(textContacts);
}

有人可以帮我吗?我的安卓是 2.3.3

最佳答案

试试下面的代码,它会帮助你:

  // You need below permission to read contacts
  <uses-permission android:name="android.permission.READ_CONTACTS"/>

  // Declare
  static final int PICK_CONTACT=1;

  Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
  startActivityForResult(intent, PICK_CONTACT);

  //code 
  @Override
 public void onActivityResult(int reqCode, int resultCode, Intent data) {
 super.onActivityResult(reqCode, resultCode, data);

 switch (reqCode) {
 case (PICK_CONTACT) :
   if (resultCode == Activity.RESULT_OK) {

     Uri contactData = data.getData();
     Cursor c =  managedQuery(contactData, null, null, null, null);
     if (c.moveToFirst()) {


         String id =c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

         String hasPhone =c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

           if (hasPhone.equalsIgnoreCase("1")) {
          Cursor phones = getContentResolver().query( 
                       ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null, 
                       ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ id, 
                       null, null);
             phones.moveToFirst();
              cNumber = phones.getString(phones.getColumnIndex("data1"));
             System.out.println("number is:"+cNumber);
           }
         String name = c.getString(c.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));


     }
   }
   break;
 }
 }

关于android - 从 android 应用程序的联系人列表中选择一个号码和姓名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9496350/

相关文章:

android - 在 android 中存储和检索联系人

android - 获取联系人图像 Xamarin Forms

android - 在 android 谷歌地图中显示大的 geojson 文件

android - mupdf 库中获取外部链接的 native 方法是什么?

java - 媒体播放器静音/取消静音太迟

android - 无法加载联系人照片 android

android - 将联系人信息加载到 ListView 时如何避免重复的联系人姓名(数据)?

android - 如何在 Android 中制作这样的列表?

Android与C++套接字通信

java - 禁用 GoogleAnalytics 以测试和开发新版本