gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:48:23 27 4
gpt4 key购买 nike

我正在尝试在 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 标志设置条目。

您可以从应用程序创建用户配置文件吗?如果是这样,关于为什么这行不通有什么想法吗?

非常感谢!斯科特

最佳答案

@ozmank 给出了一个很好的指示 - 考虑从面向 API 级别 15-23 的应用中添加一个更新的工作示例

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

  1. WRITE_PROFILE 添加到 AndroidManifest.xml uses-permission

    <uses-permission android:name="android.permission.WRITE_PROFILE"/>
  2. 创建属于配置文件的空原始联系人 - 这将生成配置文件条目

    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 中的代码并进入股票联系人应用程序,您会在我的个人资料 下看到多个空条目 -所以我的建议是尽可能保持我的个人资料干净,并跟踪您创建的原始联系人并检查它是否仍然有效 - 在创建新的原始联系人之前。

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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com