时间:2010-07-26 14:54:17

标签: android contactscontract

4 个答案:

答案 0 :(得分:7)

Google工作提供的示例代码。只是当它在模拟器上运行时,找不到任何帐户或组来附加创建的联系人。默认情况下,此新创建的联系人不可见。

使用实际的手机(对于我的情况,HTC Dream),在检测到要输入代码的帐户名称和类型后,它可以正常工作。或者,我们可以获得可见的组ID,并将新联系人附加到其中一个组。

获取可用帐户:

//accounts
    Account[] accounts = AccountManager.get(act).getAccounts(); 
    for (Account acc : accounts){
        Log.d(TAG, "account name = " + acc.name + ", type = " + acc.type);
    }

获取群组列表:

//group membership info
    String[] tempFields = new String[] {
            GroupMembership.GROUP_ROW_ID, GroupMembership.GROUP_SOURCE_ID};
    Cursor tempCur = act.managedQuery(Data.CONTENT_URI, tempFields,
             Data.MIMETYPE + "='" + GroupMembership.CONTENT_ITEM_TYPE + "'",
             null, null);

现在,如果我们想将新联系人与群组而不是帐户相关联:

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
            .withValueBackReference(Data.RAW_CONTACT_ID, 0)
            .withValue(ContactsContract.Data.MIMETYPE, GroupMembership.CONTENT_ITEM_TYPE)
            .withValue(GroupMembership.GROUP_SOURCE_ID, *<THE_IDENTIFIED_GROUP_ID>*)
            .build());

希望它有所帮助。

答案 1 :(得分:5)

要在模拟器中添加没有组或帐户的帐户,只需将“null”作为您的帐户或组ID,替换此行代码

ops.add(ContentProviderOperation
    .newInsert(ContactsContract.RawContacts.CONTENT_URI)
    .withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)  
    .withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
    .build());

答案 2 :(得分:0)

您是否尝试将群组的展示次数设置为true?

在“联系人”选项卡中按菜单按钮,而不是“显示选项”&gt;您的帐户,然后选中复选框和“完成”。

答案 3 :(得分:0)

HTC Sense和MOTOBLUR可能会对联系人造成问题。我不知道这里的任何信息(http://stackoverflow.com/questions/4431101/created-contacts-not-showing-up-on-htc-evo)是否有用。