好吧,我对Android SDK有点新意,所以请原谅我,如果我的问题没有意义或非常微不足道。我想为联系人添加一个自定义字段,其中包含我正在为此应用程序执行的网站上的联系人用户名。而且,使用此自定义字段,我希望能够单击它(如“发送消息”或“调用移动设备”),以便我可以转到应用程序中的特定活动,并使用用户名设置TextView我刚刚点击了。
对不起,如果有点混乱,如果您需要其他任何内容,请告诉我们!
答案 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列中。