联系自定义字段

时间:2010-06-09 20:50:39

标签: android

好吧,我对Android SDK有点新意,所以请原谅我,如果我的问题没有意义或非常微不足道。我想为联系人添加一个自定义字段,其中包含我正在为此应用程序执行的网站上的联系人用户名。而且,使用此自定义字段,我希望能够单击它(如“发送消息”或“调用移动设备”),以便我可以转到应用程序中的特定活动,并使用用户名设置TextView我刚刚点击了。

对不起,如果有点混乱,如果您需要其他任何内容,请告诉我们!

3 个答案:

答案 0 :(得分:4)

它正在运作!但我在这里将Data.CONTACT_ID更改为Data.RAW_CONTACT_ID:

if (mod == 0) {
    values.put(Data.CONTACT_ID, this.getId());
    values.put(Data.MIMETYPE, clsContacts.FORMALITY_MIMETYPE);
    ctx.getContentResolver().insert(Data.CONTENT_URI, values);
}

答案 1 :(得分:3)

您必须为这些创建自己的mime类型。

这是一个将布尔值作为我的自定义mime类型保存到联系人的示例。它使用最新的SDK 2.1

public static final String MIMETYPE_FORMALITY = "vnd.android.cursor.item/useformality";
public clsMyClass saveFormality() {
        try {
            ContentValues values = new ContentValues();
            values.put(Data.DATA1, this.getFormality() ? "1" : "0");
            int mod = ctx.getContentResolver().update(
                    Data.CONTENT_URI,
                    values,
                    Data.CONTACT_ID + "=" + this.getId() + " AND "
                            + Data.MIMETYPE + "= '"
                            + clsContacts.FORMALITY_MIMETYPE + "'", null);

            if (mod == 0) {
                values.put(Data.CONTACT_ID, this.getId());
                values.put(Data.MIMETYPE, clsContacts.FORMALITY_MIMETYPE);
                ctx.getContentResolver().insert(Data.CONTENT_URI, values);
            }
        } catch (Exception e) {
            Log.v(TAG(), "saveFormality failed");
        }
     return this;
    }

public boolean getFormality() {
     if (data.containsKey(FORMALITY)) {
        return data.getAsBoolean(FORMALITY);
    } else {
        // read formality
        Cursor c = readDataWithMimeType(clsContacts.MIMETYPE_FORMALITY, this.getId());
        if (c != null) {
            try {
                if (c.moveToFirst()) {
                    this.setFormality(c.getInt(0) == 1);
                    return (c.getInt(0) == 1);
                }
            } finally {
                c.close();
            }
        }
        return false;
    }

}
public clsMyClass setFormality(Boolean value) {
    data.remove(FORMALITY);
    data.put(FORMALITY, value);
    return this;
}

/**
 * Utility method to read data with mime type
 *
 * @param mimetype String representation of the mimetype used for this type
 *            of data
 * @param contactid String representation of the contact id
 * @return
 */
private Cursor readDataWithMimeType(String mimetype, String contactid) {
    return ctx.getContentResolver().query(
            Data.CONTENT_URI,
            new String[] {
                Data.DATA1
            },
            Data.RAW_CONTACT_ID + "=" + contactid + " AND " + Data.MIMETYPE + "= '" + mimetype
                    + "'", null, null);
}

用法是

objContact.setFormality(true).saveFormality();

答案 2 :(得分:0)

要添加自定义字段,您需要在MIMETYPE表中添加自定义mimetype。但我们没有直接访问MIMETYPE表。所以可以这样做:

public static final String MIMETYPE="vnd.android.cursor.item/favsong";

         ContentValues values = new ContentValues();
    values.put(Data.RAW_CONTACT_ID, id);
    values.put(Data.MIMETYPE, MIMETYPE);
    values.put(Data.DATA1, "MyFavSong");
    Uri dataUri = getContentResolver().insert(Data.CONTENT_URI, values);

我们所做的是,我们创建了一个自定义MIMETYPE作为字符串常量。 然后使用插入查询我们在数据表中插入一个新行,其中RAW_CONTACT_ID是我们想要关联我们自定义字段的人,在MIMETYPE列中我们放置我们自己的mimetype,在DATA1列中我们放置喜欢的歌曲。这里系统在MIMETYPE表中内部添加新的mimetype并给它一个ID,该ID用在Data表的mimetype_id列中。