代码之家  ›  专栏  ›  技术社区  ›  noam aghai Muhammad Habib

如何在android中从联系人处获取电话号码

  •  -1
  • noam aghai Muhammad Habib  · 技术社区  · 7 年前

    data1 号码是 32821 . 我不明白我的问题。

    这是我的代码:

    public void getContact(View view) {
        if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_CONTACTS) != PackageManager.PERMISSION_GRANTED) {
            ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_CONTACTS}, 10);
        }
    
        Intent contactsIntent = new Intent(Intent.ACTION_PICK, ContactsContract.Contacts.CONTENT_URI);
        this.pickContact = 1;
        startActivityForResult(contactsIntent, this.pickContact);
    }
    
    @Override
    public void onActivityResult(int reqCode, int resultCode, Intent data) {
        super.onActivityResult(reqCode, resultCode, data);
    
        if(reqCode == this.pickContact) {
            if (resultCode == Activity.RESULT_OK) {
                Log.d("ContactsH", "ResOK");
                Uri contactData = data.getData();
                Cursor contact =  getContentResolver().query(contactData, null, null, null, null);
    
                if (contact.moveToFirst()) {
                    String phoneNumber = ContactsContract.CommonDataKinds.Phone.NUMBER;
    
                    Log.d("ContactsH", "Calling to:"+phoneNumber);
                    contact.close();
                    this.callByNumber(phoneNumber);
                }
            }
        } else {
            Log.d("ContactsH", "Canceled");
        }
    }
    

    有什么帮助吗?

    1 回复  |  直到 4 年前
        1
  •  3
  •   noam aghai Muhammad Habib    7 年前

    感谢@Levon Petrosyan

    但我只需要添加他 link

    @Override
    public void onActivityResult(int reqCode, int resultCode, Intent data){
        super.onActivityResult(reqCode, resultCode, data);
    
        if(reqCode == this.pickContact){
            if (resultCode == Activity.RESULT_OK) {
                Log.d("ContactsH", "ResOK");
                Uri contactData = data.getData();
                Cursor contact =  getContentResolver().query(contactData, null, null, null, null);
    
                if (contact.moveToFirst()) {
                    String name = contact.getString(contact.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                    // TODO Whatever you want to do with the selected contact's name.
    
                    ContentResolver cr = getContentResolver();
                    Cursor cursor = cr.query(ContactsContract.Contacts.CONTENT_URI, null,
                            "DISPLAY_NAME = '" + name + "'", null, null);
                    if (cursor.moveToFirst()) {
                        String contactId =
                                cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));
                        //
                        //  Get all phone numbers.
                        //
                        Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
                        while (phones.moveToNext()) {
                            String number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                            int type = phones.getInt(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                            switch (type) {
                                case ContactsContract.CommonDataKinds.Phone.TYPE_HOME:
                                    // do something with the Home number here...
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_MOBILE:
                                    // do something with the Mobile number here...
                                    Log.d("ContactsH", number);
                                    this.callByNumber(number);
                                    break;
                                case ContactsContract.CommonDataKinds.Phone.TYPE_WORK:
                                    // do something with the Work number here...
                                    break;
                            }
                        }
                        phones.close();
                    }
                    cursor.close();
                }
            }
        }else{
            Log.d("ContactsH", "Canceled");
        }
    }