首先添加姓名为 Family name 的联系人

Add contact with Family name first

考虑下面的代码。例如,如果 displayName = "Squirrel, Rocky J." 那么它在联系人中显示为 "Rocky J. Squirrel"。我想按原样输入,即 "Squirrel, Rocky J." 但是在 docs 中,我不认为这是一个选项。
我该怎么做?

if (displayName != null) {
    contentProviderOperationArrayList.add(ContentProviderOperation.newInsert(
            ContactsContract.Data.CONTENT_URI)
            .withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
            .withValue(ContactsContract.Data.MIMETYPE,
                    ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
            .withValue(
                    ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME,
                    displayName)
            .build());
}

编辑:
按照 marmor 的建议更改设置后......如果我有 "Leo Tolstoy" 和 "Langston Hughes" 我希望联系人列表显示为:

H
休斯·兰斯顿
T
托尔斯泰,里奥

相反,我看到了(在三星 SM-T530 上)

L
休斯·兰斯顿
托尔斯泰,里奥

(在 Pixel C 上)

H
兰斯顿休斯
T
列夫·托尔斯泰

因此,显示不仅看起来依赖于设备且令人困惑,而且似乎无法通过编程方式控制。

当您添加联系人时(以编程方式或通过联系人编辑屏幕),Contacts 内容提供程序解析插入的姓名,并尝试将其拆分为姓名字段:prefix, first, middle, last, suffix, nickname.

之后,名称可以在 Contacts/People 应用程序中显示为“First Last”或“Last, First”,具体取决于设置。

如果要切换名称显示选项:

In the stock Contacts app, click on menu > settings > Name Format > select Last name first.

更新

系统联系人应用程序在设备之间可能略有不同,但大多数在上述设置页面中至少显示两个选项:Sort byName format

根据您在上面给出的示例,我认为您希望将两个设置都更改为 Last Name

关于以编程方式更改这些值,这可能是可行的,具体取决于您的应用具有的权限,如下所示:

Settings.system.putInt(getContentResolver(),"android.contacts.SORT_ORDER", value);

其中 value12。 阅读此内容以了解所需的权限:https://developer.android.com/reference/android/provider/Settings.System.html#canWrite(android.content.Context)