对如何在Android中查询联系人感到困惑

时间:2011-08-03 12:57:24

标签: android android-contentprovider contact

我正在制作一个使用Contacts的Android应用程序。好处是我以某种方式管理它使用Contacts.Phones,如许多教程中所见。问题是Contacts.Phones已弃用,并被ContactsContract取代。我的应用程序需要从Android 1.5+开始工作。

我需要做一些简单的操作,例如: - 查询所有联系人 - 查询特定联系人 - 备份所有联系人

实现这一目标的最佳方法是什么,考虑到我需要让应用程序在所有版本的android上运行。我是否需要在手机上检查当前的api级别并且有两个代码块,一个在api 5之后一个?

2 个答案:

答案 0 :(得分:1)

这是一个可选的解决方案

int apiVersion = android.os.Build.VERSION.SDK_INT;

    if(apiVersion < 5) {
        ContentResolver cr = getContentResolver();
        Cursor cur = cr.query(People.CONTENT_URI, 
            null, null, null, null);
        if (cur.getCount() > 0) {
         while (cur.moveToNext()) {
             String id = cur.getString(cur.getColumnIndex(People._ID));
             String name = cur.getString(cur.getColumnIndex(People.DISPLAY_NAME));
         }
        }
    } else {
        String columns[] = new String[]{ ContactsContract.Contacts._ID,
                ContactsContract.Contacts.DISPLAY_NAME };       
        Cursor  cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
                        columns,                
                        null,               
                        null,               
                        ContactsContract.Data.DISPLAY_NAME + " COLLATE LOCALIZED ASC");
        if (cursor.getCount() > 0) {
             while (cursor.moveToNext()) {
                long id = Long.parseLong(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)));   
                String displayName = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)).trim();

             }
        }
    }

这里有一个使应用程序Supporting the old and new APIs in the same application的教程,这必须帮助你。

答案 1 :(得分:0)

使用ContentResolver。试试这段代码:

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