无法从android中的显示名称中找到数字

时间:2016-11-28 19:46:01

标签: android uri android-contentresolver

我正在尝试从联系人姓名中获取号码。为获取所有者的联系人姓名,我使用了以下方法。

public String getName() {
    String name = "";
    Cursor c = this.getContentResolver().query(ContactsContract.Profile.CONTENT_URI, null, null, null, null);
    int count = c.getCount();
    String[] columnNames = c.getColumnNames();
    boolean b = c.moveToFirst();
    int position = c.getPosition();
    if (count == 1 && position == 0) {
        name = c.getString(c.getColumnIndex("display_name"));

    }
    c.close();
    return name;
}

这种方法很好用。它返回一个正确的名称。

在此之后,我尝试从名称中获取Number,但我的光标计数始终为零。这是我从名字中获取号码的代码。

public String getNumber(String name) {
    String number = null;
    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));
        Cursor phones = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + contactId, null, null);
        while (phones.moveToNext()) {
            number = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));

        }
        phones.close();
    }
    cursor.close();
    return number;
}

我还在清单文件中添加了权限

<uses-permission android:name="android.permission.GET_ACCOUNTS" />
<uses-permission android:name="android.permission.READ_PHONE_STATE"/>
<uses-permission android:name="android.permission.READ_PROFILE"/>
<uses-permission android:name="android.permission.READ_CONTACTS"/>

我不知道自己弄错了什么。请帮忙。

1 个答案:

答案 0 :(得分:0)

检查一下。希望这能解决你的问题。

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

   @Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == 1) {
        if (resultCode == RESULT_OK) {
            Uri contactData = data.getData();
            contactNumber = "";
            Cursor cursor = getContentResolver().query(contactData, null, null, null, null);
            cursor.moveToFirst();
            String hasPhone = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts.HAS_PHONE_NUMBER));
            String contactId = cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.Contacts._ID));
            if (hasPhone.equals("1")) {
                Cursor phones = getContentResolver().query
                        (ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                        + " = " + contactId, null, null);
                while (phones.moveToNext()) {
                    contactNumber = phones.getString(phones.getColumnIndex
                            (ContactsContract.CommonDataKinds.Phone.NUMBER)).replaceAll("[-() ]", "");
                    contactName=phones.getString(phones.getColumnIndex
                            (ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));


                }
                phones.close();
                //Do something with number
                if (contactNumber!=null ){

Toast.makeText(getApplicationContext(),contactNumber,Toast.LENGTH_LONG).show();
                }
            } else {
                Toast.makeText(getApplicationContext(), "This contact has no phone number", Toast.LENGTH_LONG).show();
            }
            cursor.close();
        }

    }

此外,如果android OS是marshmallow,请检查权限和授予权限示例。

 public void askPermission() {
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
        if (checkSelfPermission(Manifest.permission.CALL_PHONE)
                != PackageManager.PERMISSION_GRANTED) {
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                ActivityCompat.requestPermissions(CallClass.this,
                        new String[]{Manifest.permission.CALL_PHONE},
                        1);
            }

            // MY_PERMISSIONS_REQUEST_READ_CONTACTS is an
            // app-defined int constant

            return;
        }
    }

} 

请告诉我这是否解决了您的问题:)