【问题标题】:Unable to find number from display name in android无法从android中的显示名称中找到数字
【发布时间】:2016-11-28 19:46:01
【问题描述】:

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

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;
}

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

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

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"/>

我不知道我在哪里犯了错误。请帮忙。

【问题讨论】:

    标签: android uri android-contentresolver


    【解决方案1】:

    检查这个。希望这能解决您的问题。

      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 操作系统是棉花糖,请检查权限并授予权限示例。

     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;
            }
        }
    
    } 
    

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

    【讨论】:

    • 你的这篇文章和你的回答上一个链接stackoverflow.com/a/40846529/7007823没有区别
    • 代码看起来正确,但与个人资料联系人姓名不匹配我不知道为什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-09
    • 2014-09-07
    • 2023-04-05
    • 2014-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多