我正在使用开发指南中的方法将高分辨率的显示照片保存到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应用中显示联系人:
我想了解保存(或加载)联系人的高分辨率照片的正确方法是什么。对我来说,获得高水平的描述就足够了。我已经研究了Google Contacts应用程序的源代码,但找不到任何简单的线索来说明它们是如何完成的。提供基于Google应用程序的简单的算法配方也被视为解决方案。
我正在测试Android模拟器上的应用程序,API级别28,最低要求。 21级。
附加信息:使用Google Contact应用程序保存联系人照片时,我可以观察到相同的过程(如上所述)。因此,似乎可以在读取照片的过程中完成高分辨率照片的信息解析-保存并不是问题。
我正在使用开发指南中的方法将高分辨率的显示照片保存到Android联系人中:https://developer.android.com/reference/kotlin/android/provider/ContactsContract.RawContacts.DisplayPhoto ...
确定,我终于找到了正确的解决方案。基本上,在查看高分辨率照片之前,您应该在同步适配器服务中触发联系人照片的同步。同步完成后,您可以检索高分辨率照片,并可以在UI上进行设置。通常,在同步之前,您将只能使用缩略图品质的照片。
现在分配用于启动高分辨率照片同步的功能(Kotlin):