如何在ContactsContract中创建用户配置文件?

时间:2012-10-09 19:23:11

标签: android

我正在尝试在ContactsContract中创建一个用户配置文件...因为没有一个,我需要一个用于测试。我没有真实的Android设备,只有AVD模拟器进行测试。

以下是我正在使用的代码块:

ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();

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

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
    .withValueBackReference(Data.RAW_CONTACT_ID, 0)
    .withValue(Data.MIMETYPE, Profile.CONTENT_RAW_CONTACTS_URI)
    .withValue(Profile.IS_USER_PROFILE, 1)
    .build()); 

ops.add(ContentProviderOperation.newInsert(Data.CONTENT_URI)
    .withValueBackReference(Data.RAW_CONTACT_ID, 0)
    .withValue(Data.MIMETYPE, StructuredName.CONTENT_ITEM_TYPE)
    .withValue(StructuredName.DISPLAY_NAME, name)
    .build());

this.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);

如果删除用于使此条目成为用户配置文件的行,则它可以正常工作(即,将插入名称)。但是,我无法弄清楚如何使用IS_USER_PROFILE标志设置条目。

您可以从应用创建用户个人资料吗?如果是这样,关于为什么这不起作用的任何想法?

非常感谢! 斯科特

3 个答案:

答案 0 :(得分:3)

@ozmank 提供了一个很好的指针 - 考虑从针对API级别15-23的应用添加更新的工作示例

我主要在三星设备上遇到此问题 - 该配置文件不存在,并且当它存在时可以删除。

  1. WRITE_PROFILE

    添加到AndroidManifest.xml 使用权限
    <uses-permission android:name="android.permission.WRITE_PROFILE"/>
    
  2. 创建属于个人资料的空原始联系人 - 这将生成个人资料条目

    ContentValues values = new ContentValues();            
    context.getContentResolver().insert(Profile.CONTENT_RAW_CONTACTS_URI, values);
    
  3. 从返回的Uri中,您可以查询原始联系人条目。

    注意 - 这不会向个人资料添加信息,因此如果您使用

    查询个人资料信息
    Uri uri = Uri.withAppendedPath(Profile.CONTENT_URI, Contacts.Data.CONTENT_DIRECTORY);
    Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
    

    结果光标将为空,如果您决定再次在#2中运行代码并进入股票联系人应用程序,您将在我的个人资料下看到多个空条目 - 所以我的建议是让我的个人资料尽可能干净,并跟踪你创建的原始联系人并检查它是否仍然有效 - 在创建新的原始联系人之前。

    Uri uri = Uri.withAppendedPath(Profile.CONTENT_RAW_CONTACTS_URI, String.valueOf(lastLocalProfileManualRawId));
    Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
    
    if (cursor != null && cursor.getCount() > 0){
        // The profile exists
    } else {
        // Create a new raw contact
    }
    

答案 1 :(得分:1)

var values = new ContentValues(); values.Put(ContactsContract.Contacts.InterfaceConsts.is_user_profile,“1”); ontentResolver.Update(ContactsContract.Profile.ContentRawContactsUri,values,null,null);

答案 2 :(得分:0)

在模拟器中运行通讯录应用,并使用它设置您的个人资料。

在看到&#34;设置我的个人资料&#34;之前,您可能需要先添加常规联系人。选项。
对我来说,&#34;添加帐户&#34;按钮没有做任何事,但屏幕右下角的制表按钮开始添加新的常规联系人。

添加联系人后,点击返回返回主屏幕。它不会说您没有联系人,而是会列出您刚添加的联系人以及&#34;设置我的个人资料&#34; &#34; ME&#34;中的选项基。