2010-06-09 137 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