【问题标题】:How to import a Specific Contact's phone number?如何导入特定联系人的电话号码?
【发布时间】:2018-04-26 12:36:47
【问题描述】:

我正在尝试读取使用联系人选择器选择的联系人的电话号码。 显示名称工作正常,但电话号码没有。 代码:

//calling Contact Picker
public void CPick(View v){
        Intent intent=new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
        startActivityForResult(intent, PICK_CONTACT);
    }
    @Override
//Contact Picker here:
    protected void onActivityResult(int reqCode, int resultCode, Intent data){
        super.onActivityResult(reqCode,resultCode, data);

        if (reqCode==PICK_CONTACT){
            if(resultCode==AppCompatActivity.RESULT_OK){
                Uri contatctData=data.getData();
                Cursor c=getContentResolver().query(contatctData,null,null,null,null);
                if (c.moveToFirst()){
                    //String name=c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts.DISPLAY_NAME));
//Above line works Fine

                    String name=c.getString(c.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER));
//Above line gives error on runtime "invalid column"
                    Toast.makeText(this,"U have picked:"+name,Toast.LENGTH_SHORT).show();



                }
            }

        }
    }

非常感谢任何帮助,因为我在任何地方都找不到相关答案。

【问题讨论】:

    标签: android uri android-contacts contactpicker


    【解决方案1】:

    如果您想让用户选择电话号码,最好的选择是使用PHONE-PICKER 而不是CONTACT-PICKER

    Intent intent = new Intent(Intent.ACTION_PICK, CommonDataKinds.Phone.CONTENT_URI);
    startActivityForResult(intent, PICK_PHONE);
    
    ...
    
    protected void onActivityResult(int requestCode, int resultCode, Intent intent){
        if (requestCode == PICK_PHONE && resultCode == RESULT_OK){
            Uri phoneUri = intent.getData();
            Cursor cur = getContentResolver().query(phoneUri, new String[] { Phone.DISPLAY_NAME, Phone.NUMBER }, null, null, null);
            if (cur != null && cur.moveToFirst()){
                String name = cur.getString(0);
                String number = cur.getString(1);
                Log.d("PHONE-PICKER", "User picker: " + name + " - " + number);
                cur.close();
            }
        }
    }
    

    【讨论】:

    • 没有什么叫做 PICK_PHONE
    • 像魅力一样工作。你又救了我一天:)
    【解决方案2】:

    试试这个方法:

    private void retrieveContactNumber() {
    
      String contactNumber = null;
    
      // getting contacts ID
      Cursor cursorID = getContentResolver().query(uriContact,
            new String[]{ContactsContract.Contacts._ID},
            null, null, null);
    
      if (cursorID.moveToFirst()) {
    
        contactId = cursorID.getString(cursorID.getColumnIndex(ContactsContract.Contacts._ID));
      }
    
      cursorID.close();
    
      Log.d(TAG, "Contact ID: " + contactId);
    
      // Using the contact ID now we will get contact phone number
      Cursor cursorPhone = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
            new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER},
    
            ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ? AND " +
                    ContactsContract.CommonDataKinds.Phone.TYPE + " = " +
                    ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE,
    
            new String[]{contactId}, null);
    
      if (cursorPhone.moveToFirst()) {
        contactNumber = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
      }
    
      cursorPhone.close();
    
      Log.d(TAG, "Contact Phone Number: " + contactNumber);
    }
    

    您应该会在 logcat 中看到联系电话。

    【讨论】:

    • 不返回我选择的联系人的电话号码,它总是选择 ID==1 的联系人。与电话号码相同。
    猜你喜欢
    • 2013-07-17
    • 2021-07-17
    • 2016-12-26
    • 2012-06-13
    • 1970-01-01
    • 1970-01-01
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多