Android通讯录高分辨率照片未显示

问题描述 投票:1回答:1

我正在使用开发指南中的方法将高分辨率的显示照片保存到Android联系人:https://developer.android.com/reference/kotlin/android/provider/ContactsContract.RawContacts.DisplayPhoto

保存联系人表后如下所示:

------------------------------------------------------------------------------------------------------------------------------------------------------------------
| *** Contacts table ***                                                                                                                                         |
------------------------------------------------------------------------------------------------------------------------------------------------------------------
| _id | raw_contact_id | display_name | photo_id | file_id |                  photo_thumb_uri                  |                    photo_uri                    |
------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 661 |    661         | ContactName  |   6125   |    26   | content://com.android.contacts/contacts/661/photo | content://com.android.contacts/display_photo/26 |
------------------------------------------------------------------------------------------------------------------------------------------------------------------

PhotoUri是正确的,实际上我可以使用该URI加载高分辨率照片。

但是过了一会儿,Contact Synchronization Service已启动:

2019-08-30 15:17:42.991 14029-19208/? W/FSA2_ContactsSyncAdapter: @onPerformSync Sync started
2019-08-30 15:17:43.056 14029-19208/? W/ChimeraUtils: Non Chimera context
2019-08-30 15:17:43.056 14029-19208/? W/ChimeraUtils: Non Chimera context

2019-08-30 15:17:43.721 14029-19208/? I/FSA2_SyncState: @readSyncState: # aohd@ea156530

2019-08-30 15:17:44.133 14029-19208/? I/FSA2_SyncState: @readSyncState: # aohd@4c3cbbea

2019-08-30 15:17:44.335 14029-19208/? E/PhotoUrlUtil: Photo cell is empty.

2019-08-30 15:17:45.242 14029-19208/? I/FSA2_SyncUpPhotoCursor: Start to upload photo for contact 74ae94138cec7df6
2019-08-30 15:17:45.248 14029-19208/? E/PhotoUrlUtil: Photo cell is empty.
2019-08-30 15:17:45.248 14029-19208/? E/PhotoUrlUtil: Photo cell is empty.

2019-08-30 15:17:47.016 14029-19208/? W/FSA2_ContactsSyncAdapter: @onPerformSync Sync finished successfully

同步后的联系人表不正确,没有引用高分辨率照片,而仅引用了缩略图(分辨率低的照片。)>

--------------------------------------------------------------------------------------------------------------------------------------------------------------------
| *** Contacts table ***                                                                                                                                           |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
| _id | raw_contact_id | display_name | photo_id | file_id |                  photo_thumb_uri                  |                    photo_uri                      |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
| 661 |    661         | ContactName  |   6125   |   null  | content://com.android.contacts/contacts/661/photo | content://com.android.contacts/contacts/661/photo |
--------------------------------------------------------------------------------------------------------------------------------------------------------------------

我无法再使用来自联系人表的URI读取高分辨率数据。我正在使用以下方法:

//true is for high-res photos
ContactsContract.Contacts.openContactPhotoInputStream(contentResolver, contactUri, true)

同时,“ Google联系人”应用程序可以加载高分辨率的联系人照片。当我启动Google联系人应用程序时,稍后会在联系人详细信息视图中显示高分辨率照片。在Google应用中打开联系人后,我可以再次在“联系人”表中看到正确的条目。

据我了解,通过QuickContactActivity实现了在Google应用中显示联系人:

https://android.googlesource.com/platform/packages/apps/Contacts/+/refs/heads/master/src/com/android/contacts/quickcontact/QuickContactActivity.java#1120

我想了解保存(或加载)联系人的高分辨率照片的正确方法是什么。对我来说,获得高水平的描述就足够了。我已经研究了Google Contacts应用程序的源代码,但找不到任何简单的线索来说明它们是如何完成的。提供基于Google应用程序的简单的算法配方也被视为解决方案。

我正在测试Android模拟器上的应用程序,API级别28,最低要求。 21级。

附加信息:使用Google Contact应用程序保存联系人照片时,我可以观察到相同的过程(如上所述)。因此,似乎可以在读取照片的过程中完成高分辨率照片的信息解析-保存并不是问题。

我正在使用开发指南中的方法将高分辨率的显示照片保存到Android联系人中:https://developer.android.com/reference/kotlin/android/provider/ContactsContract.RawContacts.DisplayPhoto ...

android android-contacts
1个回答
0
投票

确定,我终于找到了正确的解决方案。基本上,在查看高分辨率照片之前,您应该在同步适配器服务中触发联系人照片的同步。同步完成后,您可以检索高分辨率照片,并可以在UI上进行设置。通常,在同步之前,您将只能使用缩略图品质的照片。

现在分配用于启动高分辨率照片同步的功能(Kotlin):

© www.soinside.com 2019 - 2024. All rights reserved.