2010-06-09 106 views
5

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

对不起,如果这有点令人困惑,如果你需要其他东西让我知道!

+0

可能重复的[如何向联系人添加新字段?](http://stackoverflow.com/questions/2733589/how-to-add-new-fields-to-the-contact) – Pentium10 2010-06-09 21:53:11

+0

可能重复的[如何以编程方式将图片(位图)分配给联系人?](http://stackoverflow.com/questions/3076197/how-to-programmatically-assign-a-picture-bitmap-to-a-contact ) – Pentium10 2010-06-19 19:16:12

回答

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(); 
+0

什么在数据 “如果(data.containsKey(手续))” – 2017-07-21 05:38:42

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); 
} 
+0

和这里:'INT MOD = ctx.getContentResolver()更新( Data.CONTENT_URI, 值, Data.CONTACT_ID + “=” + this.getId()+“AND” + Data.MIMETYPE +“='” + clsContacts.FORMALITY_MIMETYPE +“'”,null);' – 2013-02-18 18:44:02

0

要添加您需要在MIMETYPE表中添加自定义MIME类型的自定义字段。但是我们没有直接访问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列。

+0

A你确定这段代码添加了新字段,我尝试了这段代码,但是它用MyFavSong替换了我的联系人名称。为什么? – 2013-10-31 12:05:34