检索联系人备注

时间:2011-06-09 21:40:55

标签: android

我仍然是Android应用程序开发的新手,我遇到了一个问题,我希望你能帮助我......

我正在尝试检索针对手机中的联系人存储的任何“注释”。我想检查联系人(当前来电者)是否有与之相关的任何注释,然后根据内容等显示内容或执行某些操作......

我已经尝试下面的代码作为测试,看看数据是否在我的光标内的任何地方被检索,但是虽然它检索了一些数据,但我看不到注释的内容 - 所以我想我在错误的地方!

我已经声明了contentID,这是使用下面的代码进行查找并使用收到的id的结果。

Uri lookupUri = Uri.withAppendedPath(Phone.CONTENT_FILTER_URI, Uri.encode(inCommingNumber));
String[] mPhoneNumberProjection = { Phone._ID, Phone.NUMBER, Phone.DISPLAY_NAME};
Cursor cur = getContentResolver().query(lookupUri , mPhoneNumberProjection, null, null, null);


private boolean hasNote(String contactID){
    Boolean noteFound = false;

Cursor noteCur = getContentResolver().query(ContactsContract.Data.CONTENT_URI, null, null, null, null);
if(noteCur.moveToFirst()) { 
     int numCols = noteCur.getColumnCount();
     if(numCols > 0){
         for(int x = 0; x < numCols; x++){
             Log.d(APP_TAG, " column " + x + " contains: " + noteCur.getString(x));
         }
     }

    noteFound = true;   
} else{
    Log.d(APP_TAG, "No Note retrieved");
}

noteCur.close();
return noteFound;
}

道歉,我似乎无法在这篇文章中正确显示代码!!

任何帮助都会很棒

我尝试了各种各样的东西,但似乎无法获得这些数据。我通过简单的联系人管理器添加它来创建注释。我正在使用Android 2.2。

1 个答案:

答案 0 :(得分:2)

以下代码会显示手机上所有联系人的第一个备注:

Cursor contactsCursor = null;
try {
    contactsCursor = getContentResolver().query(RawContacts.CONTENT_URI,
            new String [] { RawContacts._ID },
            null, null, null);
    if (contactsCursor != null && contactsCursor.moveToFirst()) {
        do {
            String rawContactId = contactsCursor.getString(0);
            Cursor noteCursor = null;
            try {
                noteCursor = getContentResolver().query(Data.CONTENT_URI,
                        new String[] {Data._ID, Note.NOTE},
                        Data.RAW_CONTACT_ID + "=?" + " AND "
                                + Data.MIMETYPE + "='" + Note.CONTENT_ITEM_TYPE + "'",
                                new String[] {rawContactId}, null);

                if (noteCursor != null && noteCursor.moveToFirst()) {
                    String note = noteCursor.getString(noteCursor.getColumnIndex(Note.NOTE));
                    Log.d(APP_TAG, "Note: " + note);
                }
            } finally {
                if (noteCursor != null) {
                    noteCursor.close();
                }
            }
        } while (contactsCursor.moveToNext());  
    }
} finally {
    if (contactsCursor != null) {
        contactsCursor.close();
    }
}

如果您要在笔记上存储某种结构化数据,以便对使用自由格式备注字段采取措施可能不是最佳方法。使用新的联系人合同模型,您可以将自己的数据字段(在ContactsContract.Data中)附加到联系人,只需为他们提供您自己唯一的mimetype。