我正在尝试在ContactsContract中创建一个用户个人资料...因为没有一个用户个人资料,因此我需要一个用户个人资料进行测试。我没有真实的Android设备,只有AVD Emulator用于测试。

这是我正在使用的代码块:

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标志的条目。

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

非常感谢!
史考特

最佳答案

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

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

  • 添加到AndroidManifest.xml中使用权限 WRITE_PROFILE
    <uses-permission android:name="android.permission.WRITE_PROFILE"/>
    
  • 创建一个属于个人资料的空原始联系人-这将生成个人资料条目
    ContentValues values = new ContentValues();
    context.getContentResolver().insert(Profile.CONTENT_RAW_CONTACTS_URI, values);
    

  • 从返回的Uri中,您可以查询原始联系人条目。

    注意-这不会向个人资料中添加信息,因此,如果您要使用以下方式在个人资料中查询信息
    Uri uri = Uri.withAppendedPath(Profile.CONTENT_URI, Contacts.Data.CONTENT_DIRECTORY);
    Cursor cursor = context.getContentResolver().query(uri, null, null, null, null);
    

    结果光标将为空,并且如果您决定再次运行#2中的代码并进入股票联系人应用程序,则您将在 Me个人资料下看到多个空条目-所以我的建议是保留我在创建新的原始联系人之前,将其配置为尽可能干净,并跟踪您创建的原始联系人并检查其是否仍然有效。
    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
    }
    

    关于android - 如何在ContactsContract中创建用户个人资料?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12806954/

    10-12 04:03