【发布时间】:2019-08-30 13:40:34
【问题描述】:
我正在使用开发指南中的方法将高分辨率显示照片保存到 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 应用中打开联系人后,我可以再次在联系人表中看到正确的条目。
据我了解,在 Google 应用中显示联系人是在 QuickContactActivity 中实现的:
我想了解保存(或加载)联系人高分辨率照片的正确方法是什么。对我来说,得到一个高级描述就足够了。我调查了 Google 通讯录应用程序源代码,但我找不到任何简单的线索,它们是如何完成的。提供基于 Google 应用的简单算法配方也算作一种解决方案。
我正在 Android 模拟器上测试应用程序,API 级别 28,最低。 21级。
附加信息: 在使用 Google 联系人应用程序保存联系人照片时,我可以观察到相同的过程(如上所述)。因此,似乎在读取照片时解析高分辨率照片信息 - 保存不是问题。
【问题讨论】: