【问题标题】:How to select contact number from contact list using android studio?如何使用 android studio 从联系人列表中选择联系人号码?
【发布时间】:2016-03-01 11:27:14
【问题描述】:

Look at my screenshot

如何从联系人列表中获取所选联系人的号码和姓名。

【问题讨论】:

  • 你试过什么?>
  • 看我的截图
  • 你的代码在哪里?截图是不够的。
  • 下面是我的源代码

标签: android android-studio


【解决方案1】:

点击代码

 Intent pickContact = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
 pickContact.setType(ContactsContract.CommonDataKinds.Phone.CONTENT_TYPE)
 startActivityForResult(pickContact, 1);

onActivityResult 代码

 Uri contactData = data.getData();
 Cursor c = getContentResolver().query(contactData, null, null, null, null);
 if (c.moveToFirst()) {
                   int phoneIndex = getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER);
                   String num = c.getString(phoneIndex);
                   Toast.makeText(MainActivity.this, "Number=" + num, Toast.LENGTH_LONG).show();
           }

【讨论】:

    【解决方案2】:

    要从您的联系人列表中获取选定联系人的联系人姓名、电话号码以及电子邮件,您只需添加此代码即可。

    private Button btn;
    private String TAG = "Contacts";
    private static final int RESULT_PICK_CONTACT = 1;
    
    
    btn.setOnClickListener(new View.OnClickListener() {    
    @Override
    public void onClick(View v) {
    selectSingleContact();
        }
    });
    
    private void selectSingleContact() {   
    Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,ContactsContract.CommonDataKinds.Phone.CONTENT_URI);
    startActivityForResult(contactPickerIntent, RESULT_PICK_CONTACT);
    }    
    
    @Override
    public 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 startActivityForResult
        switch (requestCode) {
            case RESULT_PICK_CONTACT:
                contactPicked(data);
                break;
        }
    } else {
        Log.e("ContactFragment", "Failed to pick contact");
           }
    }
    
    private void contactPicked(Intent data) {
    
    Uri uri = data.getData();
    Log.i(TAG, "contactPicked() uri " + uri.toString());
    Cursor cursor;
    ContentResolver cr = getActivity().getContentResolver();
    
    try {
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
        if (null != cur && cur.getCount() > 0) {
            cur.moveToFirst();
            for (String column : cur.getColumnNames()) {
                Log.i(TAG, "contactPicked() Contacts column " + column + " : " + cur.getString(cur.getColumnIndex(column)));
            }
        }
    
        if (cur.getCount() > 0) {
          //Query the content uri
            cursor = getActivity().getContentResolver().query(uri, null, null, null, null);
    
            if (null != cursor && cursor.getCount() > 0) {
                cursor.moveToFirst();
                for (String column : cursor.getColumnNames()) {
                    Log.i(TAG, "contactPicked() uri column " + column + " : " + cursor.getString(cursor.getColumnIndex(column)));
                }
            }
    
            cursor.moveToFirst();
            id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
            Log.i(TAG, "contactPicked() uri id " + id);
            String contact_id = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.CONTACT_ID));
            Log.i(TAG, "contactPicked() uri contact id " + contact_id);
            // column index of the contact name
            name = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
            // column index of the phone number
            phoneNo = cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
            //get Email id of selected contact....
            Log.e("ContactsFragment", "::>> " + id + name + phoneNo);
    
            Cursor cur1 = cr.query(ContactsContract.CommonDataKinds.Email.CONTENT_URI, null,
                    ContactsContract.CommonDataKinds.Email.CONTACT_ID + " = ?", new String[]{contact_id}, null);
    
            if (null != cur1 && cur1.getCount() > 0) {
                cur1.moveToFirst();
                for (String column : cur1.getColumnNames()) {
                    Log.i(TAG, "contactPicked() Email column " + column + " : " + cur1.getString(cur1.getColumnIndex(column)));
                    email = cur1.getString(cur1.getColumnIndex(ContactsContract.CommonDataKinds.Email.DATA));
                }
    
               //HERE YOU GET name, phoneno & email of selected contact from contactlist.....
                Log.e("setcontactDetails","::>>" + name+"\nPhoneno:" + phoneNo+"\nEmail: " + email);
            } else {
                Log.e("setcontactDetails","::>>" + name+"\nPhoneno:" + phoneNo+"\nEmail: " + email);
            }
        }
    } catch (IndexOutOfBoundsException e) {
        e.printStackTrace();
        }
    }
    

    同时为您的 AndroidManifest.xml 添加权限 它对我有用,希望它也对你有用。

    【讨论】:

    • 这是非常低效的。 moveToFirst 返回一个布尔值,如果为 null,则为 false。无需继续检查游标并发出无关查询。
    【解决方案3】:
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_usercontact);
    
        class MainActivity extends Activity {
            private final int REQUEST_CODE=99;
            protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.content_usercontact);
                EditText editText = (EditText)findViewById(R.id.editTextcontacts1);
                EditText editText1 = (EditText)findViewById(R.id.editTextcontacts2);
                EditText editText2 = (EditText)findViewById(R.id.editTextcontacts3);
                editText.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                        startActivityForResult(intent, REQUEST_CODE);
                    }
                });
    
                editText1.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                        startActivityForResult(intent, REQUEST_CODE);
                    }
                });
    
                editText2.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        Intent intent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
                        startActivityForResult(intent, REQUEST_CODE);
                    }
                });
    
            }
    
    
            @Override
            public void onActivityResult(int reqCode, int resultCode, Intent data) {
                super.onActivityResult(reqCode, resultCode, data);
                switch (reqCode) {
                    case (REQUEST_CODE):
                        if (resultCode == Activity.RESULT_OK) {
                            Uri contactData = data.getData();
                            Cursor c = getContentResolver().query(contactData, null, null, null, null);
                            if (c.moveToFirst()) {
                                String contactId = c.getString(c.getColumnIndex(ContactsContract.Contacts._ID));
                                String hasNumber = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));
                                String num = "";
                                if (Integer.valueOf(hasNumber) == 1) {
                                    Cursor numbers = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                                    while (numbers.moveToNext()) {
                                        num = numbers.getString(numbers.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                                        Toast.makeText(MainActivity.this, "Number=" + num, Toast.LENGTH_LONG).show();
                                    }
                                }
                            }
                            break;
                        }
                }
            }
    
        }
    }
    

    }

    【讨论】:

    • 这是作为答案发布的,但它不会尝试回答问题。它可能应该是编辑、评论、另一个问题或完全删除。
    猜你喜欢
    • 2021-07-06
    • 1970-01-01
    • 2017-06-22
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2014-04-04
    • 1970-01-01
    • 2019-06-15
    相关资源
    最近更新 更多