从电话簿中获取联系人号码在android

Posted

技术标签:

【中文标题】从电话簿中获取联系人号码在android【英文标题】:Get Contact No From PhoneBook In android 【发布时间】:2015-07-20 04:31:13 【问题描述】:

我正在开发一个简单的应用程序,当我点击EditText时,电话联系人会打开,当用户选择一个联系人时,它会显示在编辑文本。 我已经做到了,但问题是某些联系人显示输出如下:

05-09 13:39:03.660: D/Actual No--->>>(953): 84 85 835654
05-09 13:39:03.660: D/phoneno(953): Tufan 85 835654
05-09 13:39:08.911: W/IInputConnectionWrapper(953): showStatusIcon on inactive InputConnection
05-09 13:39:15.428: D/Actual No--->>>(953): 08485835654
05-09 13:39:15.428: D/phoneno(953): Tufan8485835654
05-09 13:39:22.512: W/IInputConnectionWrapper(953): showStatusIcon on    inactive InputConnection
05-09 13:39:31.825: W/IInputConnectionWrapper(953): showStatusIcon on inactive InputConnection
05-09 13:39:42.468: W/IInputConnectionWrapper(953): showStatusIcon on inactive InputConnection
05-09 13:45:16.147: D/Actual No--->>>(953): +918485835654
05-09 13:45:16.147: D/phoneno(953): Tufan8485835654

所以你可以看到一些联系它给了我正确的结果。这个朋友怎么解决?

检查我的 java 代码:

Uri contactData = data.getData();
Cursor c = managedQuery(contactData, null, null, null, null);
if (c.moveToFirst()) 
    String id = c.getString(c.getColumnIndexOrThrow(ContactsContract.Contacts._ID));

    String hasPhone = c.getString(c.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER));

    if (hasPhone.equalsIgnoreCase("1")) 
        Cursor phones = getContentResolver().query(
                ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,
                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + id,
                null, null);
        phones.moveToFirst();
        String phn_no = phones.getString(phones.getColumnIndex("data1"));
        Log.d("Actual No--->>>", phn_no);
        int len = phn_no.length() % 10;
        String phn_no1 = phn_no.substring(len, phn_no.length());
        Log.d("phoneno", "Tufan" + phn_no1);
    

我认为问题在于数字之间的空间,但取决于用户如何保存。但作为程序员,我需要解决。如果有人知道,请帮帮我。

【问题讨论】:

那你想做什么 【参考方案1】:

获取联系电话的代码似乎没问题。

我想问题只是联系号码中的空格。

您可以通过替换来删除该空间 -

String phn_no = phones.getString(phones.getColumnIndex("data1"));

String phn_no = phones.getString(phones.getColumnIndex("data1")).trim().replace(" ","");

希望对您有所帮助。祝你好运。

【讨论】:

【参考方案2】:

试试这个代码,这是正在运行的代码。

    Cursor phones = getContentResolver().query(
            ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null,
            null, null);
    while (phones.moveToNext()) 
        String name = phones
                .getString(phones
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
        String phoneNumber = phones
                .getString(phones
                        .getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
        Toast.makeText(getApplicationContext(), name, Toast.LENGTH_LONG)
                .show();

        System.out.println(name + "==" + phoneNumber);

    
    phones.close();

【讨论】:

以上是关于从电话簿中获取联系人号码在android的主要内容,如果未能解决你的问题,请参考以下文章

Android从联系人列表中获取电话号码

如何从android中的给定电话号码获取电话号码类型标签

如何从 Android 设备中仅获取电话号码联系人

使用 ContentProvider 从联系人获取电话号码 - Android

Android - 从电话号码获取联系人照片

从 Android 中的 URI 检索联系人电话号码