我可以扩展Androids Contacts数据库吗?

时间:2011-01-19 18:29:20

标签: android contacts android-contentprovider extensible

我想知道是否可以扩展Android联系人数据库?

从这里开始 - http://d.android.com/reference/android/provider/ContactsContract.html

它说:

  

ContactsContract定义了一个可扩展的   与联系人有关的数据库   信息

Extensible会向我建议我可以在正常值之外向联系人应用程序添加更多数据,例如姓名,号码,电子邮件,工作号码,家庭电话号码等。

但是,此页面的示例 - http://d.android.com/reference/android/provider/ContactsContract.RawContacts.html仅显示如何插入标准值(如名称),而不显示如何向联系人添加新字段。

此外,在网络上搜索没有提供有关扩展联系人数据的大量信息。

所以我想知道它是否可能,或者可扩展性是否涉及联系人的其他部分?

例如,我想为我的应用程序中具有特殊权限的联系人添加一个附加字段,这样当用户查看联系人时,他或她知道他们可以使用我的应用程序的用户。

这可能吗?

1 个答案:

答案 0 :(得分:2)

您可以在联系人数据库中存储自定义数据。但是,“当用户查看联系人时,他或她知道他们可以使用我的应用程序的用户”,如果您认为用户将能够在使用内置Android联系人时看到您插入的自定义数据,则可能无法实现应用。您必须在自己的应用程序中显示自定义数据。

ContactsContract.Data类的javadoc应该提供解释,以及Contacts article

要使用此功能,您需要通过查询RawContacts来获取原始联系人ID。

这里有一些示例代码可以帮助您入门......

private void makePowerful(int rawContactId) {
    ContentValues values = new ContentValues();
    values.put(Privilege.RAW_CONTACT_ID, rawContactId);
    values.put(Privilege.MIMETYPE, Privilege.CONTENT_ITEM_TYPE);
    values.put(Privilege.PRIVILEGE_LEVEL, Privilege.TYPE_POWERFUL);
    Uri uri = getContentResolver().insert(Data.CONTENT_URI, values);
}

public static final class Privilege implements ContactsContract.DataColumnsWithJoins, ContactsContract.CommonDataKinds.CommonColumns {
    public static final String CONTENT_ITEM_TYPE = ContentResolver.CURSOR_ITEM_BASE_TYPE + "/my_app_privilege";
    public static final int TYPE_POWERFUL = 1;
    public static final int TYPE_WEAK = 2;
    public static final String PRIVILEGE_LEVEL = DATA1;

    private Privilege() { }
}