如何使用android 2.1中的联系人名称填充AutoCompleteTextView

时间:2010-07-16 00:00:05

标签: android autocompletetextview

我有一个AutoCompleteTextView,我想让它在输入时自动填写联系人姓名。问题是Contacts.People已被弃用。新文档说使用ContactsContract但我找不到任何适当的教程。任何人都可以给我一个示例代码或指向我适当的教程。

感谢。

1 个答案:

答案 0 :(得分:1)

适用于2.0的Android Contact API

授予访问权限

在应用程序可以查询联系人记录之前,必须通过存储在项目根目录中的AndroidManifest.xml文件授予访问权限。在uses-sdk语句下面添加以下uses-permission。

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

查询Android联系人数据库

检索联系人详细信息

存储在Contacts表中的基本联系信息,其中包含存储在各个表中的详细信息以进行规范化。在Android 2.0中查询基本联系人记录,要查询的URI存储在ContactsContract.Contacts.CONTENT_URI中。 package higherpass.TestContacts;

import android.app.Activity;
import android.content.ContentResolver;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.ContactsContract;

public class TestContacts extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI,
                null, null, null, null);
        if (cur.getCount() > 0) {
            while (cur.moveToNext()) {
                String id = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts._ID));
                String name = cur.getString(
                        cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
                if (Integer.parseInt(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) {
                    //Query phone here.  Covered next
                }
            }
        }
    }
}

此应用程序与任何其他Android应用程序一样启动。首先在cr中创建一个ContentResolver实例。然后使用ContentResolver实例查询数据库并返回带有联系人列表的Cursor。查询是针对存储在ContactsContract.Contacts.CONTENT_URI中的URI执行的。接下来检查光标是否包含记录,如果是,则循环显示它们。记录ID字段存储在id变量中。这将在稍后用作where参数。显示名称字段也存储在字符串名称中。

详细了解Working With Android Contacts