Android:我正在尝试根据显示名称搜索联系人

时间:2016-12-06 10:44:54

标签: android android-studio android-cursoradapter contactscontract

我正在尝试根据显示名称搜索联系人。 我从android开发者网站上提供的示例代码中获取了参考资料。

https://developer.android.com/training/contacts-provider/retrieve-names.html

在此示例中,搜索从联系人姓名中的联系人详细信息中执行。

例如,如果用户的联系人中有电子邮件地址,则搜索也会在匹配电子邮件时执行。  或者如果一个号码存储在家庭类型中,那么在输入h时,家庭类别中出现的号码也会显示出来。

我希望搜索仅限于其显示名称。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO.Ports;

namespace DLMSRS485Console
{
    class Program
    {
        static void Main(string[] args)
        {
            SerialPort myPort = new SerialPort("COM5");
            //myPort.PortName = "COM5";
            myPort.BaudRate = 9600;
            myPort.Parity = Parity.None;
            myPort.StopBits = StopBits.One;
            myPort.DataBits = 8;
            myPort.Handshake = Handshake.None;
            myPort.RtsEnable = true;
            myPort.Open();
            myPort.DataReceived += new SerialDataReceivedEventHandler(myPort_DataReceived);
            myPort.WriteLine("Hello\n");
            Console.Write("Bytes to read : ");
            int b = myPort.BytesToRead;
            Console.WriteLine(b);
            //myPort.WriteLine("rtfm ^^");
            Console.ReadKey();
            myPort.Close();
        }
        private static void myPort_DataReceived(object sender, SerialDataReceivedEventArgs e)
        {
            SerialPort sp = (SerialPort)sender;
            string data = sp.ReadExisting();
            Console.Write("Bytes to read : ");
            Console.WriteLine(sp.BytesToRead);
            Console.WriteLine(data);
        }
    }
}

这是我从示例代码中使用的selecton子句。

2 个答案:

答案 0 :(得分:1)

试试这个

Cursor cursor = getContentResolver().query(
            android.provider.ContactsContract.Contacts.CONTENT_URI,
            new String[] { ContactsContract.Contacts.PHOTO_ID,
                    ContactsContract.Contacts.DISPLAY_NAME,
                    ContactsContract.Contacts._ID },
            ContactsContract.Contacts.HAS_PHONE_NUMBER, null,
            ContactsContract.Contacts.DISPLAY_NAME);

cursor为所有拥有任意电话号码的联系人提供,然后我将ID中的唯一ArrayList保存为

cursor.moveToFirst();

    while (cursor.moveToNext()) {
        contactsID.add(cursor.getString(2));
    }

然后在选择联系人时,我会使用此

找到联系号码
Cursor cursor = getContentResolver()
                    .query(android.provider.ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
                            new String[] {
                                    ContactsContract.CommonDataKinds.Phone.NUMBER,
                                    ContactsContract.CommonDataKinds.Phone.CONTACT_ID,
                                    ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME },
                            ContactsContract.CommonDataKinds.Phone.CONTACT_ID
                                    + " = ?",
                            new String[] { contactsID.get(position) }, null);
            contactNumbers = new ArrayList<String>();
            while (cursor.moveToNext()) {
                contactNumbers.add(cursor.getString(0));
                Log.d("number", cursor.getString(0));
            }

答案 1 :(得分:0)

response['balance_info']['balance'] 教程中进行过滤的代码在这里:

Retrieving a List of Contacts

Contacts.CONTENT_FILTER_URI文档中说:

  

过滤字符串将用于匹配联系人的各个部分   名称

这样对您不利,请将其替换为:

Uri contentUri = Uri.withAppendedPath(Contacts.CONTENT_FILTER_URI, Uri.encode(mSearchString));