【问题标题】:Retrieve contact name and phone after startActivityForResult() [duplicate]在 startActivityForResult() 之后检索联系人姓名和电话 [重复]
【发布时间】:2014-07-05 18:36:58
【问题描述】:

我已经为结果开始了一个新的意图活动 代码:

    Intent contactPickerIntent = new Intent(Intent.ACTION_PICK, Phone.CONTENT_URI);  

    startActivityForResult(contactPickerIntent, 1);

现在我想获取电话和号码:

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

    if (requestCode == 1) {

        if(resultCode == RESULT_OK){

            Uri contactUri = data.getData();

            String[] pN = {Phone.NUMBER};

            String[] pNa = {Phone.CONTACT_ID};//idk

            Cursor cP = getContentResolver().query(contactUri, pN, null, null, null);
            cP.moveToFirst();

            Cursor cPa = getContentResolver().query(contactUri, pNa, null, null, null);
            cPa.moveToFirst();

            int numc = cP.getColumnIndex(Phone.NUMBER);
            String num = cP.getString(numc);

            int namec = cPa.getColumnIndex(Phone.CONTACT_ID);//idk
            String name = cPa.getString(namec);//idk

            Log.i("", name);

        }
        if (resultCode == RESULT_CANCELED) {
            //DO OTHER STUFF
        }
    }
}   

电话号码没问题,但我无法检索联系人的 GIVEN NAME!

【问题讨论】:

  • 联系人的名字是DISPLAY_NAME,而不是CONTACT_ID

标签: java android


【解决方案1】:
 Uri uri = data.getData();

        Cursor cursor = getContentResolver().query(uri, null, null, null, null);

        cursor.moveToFirst();
        name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

        cursor.moveToFirst();
        number = cursor.getString(cursor.getColumnIndex(Phone.NUMBER));

【讨论】:

    【解决方案2】:

    试试这个代码,它可能有助于做一些小的改动...

      static final int PICK_CONTACT_=1;
    
      Intent intent_1 = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
      startActivityForResult(intent_1, PICK_CONTACT_);
    
    
      @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 cursor =  managedQuery(contactData, null, null, null, null);
         if (cursor.moveToFirst()) {
    
    
             String id =cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
    
             String hasPhone =cursor.getString(cursor.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("data_1"));
                 System.out.println("number is:"+cNumber);
               }
             String name = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
    
    
         }
       }
       break;
     }
     }
    

    【讨论】:

    • String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));抛出错误
    • 这是因为,在你的情况下它是 'Number' 而不是 'HAS_PHONE_NUMBER' ,所以你应该做一些小的改变来适应你的需求。
    • 好的等我测试
    • 没有ContactsContract.Contacts.NUMBER这样的东西
    猜你喜欢
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    • 2011-08-10
    • 2021-05-14
    • 1970-01-01
    • 1970-01-01
    • 2018-03-16
    相关资源
    最近更新 更多