gpt4 book ai didi

Android 原生联系人应用程序删除每个帐户联系人

转载 作者:行者123 更新时间:2023-11-30 03:30:00 25 4
gpt4 key购买 nike

我的问题是我试图禁止 native Android 联系人应用程序从设备中删除我的应用程序的联系人(由我的应用程序帐户类型指定)。

为此,我指定了我自己的 SyncAdapter 及其自己的 Service,它是 syncadapter.xml 中描述的元数据。 supportsUploading 的值设置为 false(这样我就说我的应用程序创建的联系人是只读的)

但是,当我尝试从标准联系人应用程序中删除我的应用程序的联系人时,我收到消息说:

You can't delete contacts from read-only accounts, but you can hide them in your contacts list

一切似乎都很好,直到我尝试从我自己的应用程序中的标准“联系人”中获取我之前删除(“隐藏”)的联系人数据。

返回的游标为空,因为 Data 中没有任何行与此联系人的 RAW_CONTACT_ID 关联的表.我还检查联系人是否存在于寻找的设备上这是DELETED RawContacts 中的标志值表并观察到它已设置为 1,这意味着该联系人已被删除。

如官方文档所述:

Some sync adapters are read-only, meaning that they only sync server-side changes to the phone, but not the reverse. If one of those raw contacts is marked for deletion, it will remain on the phone. However it will be effectively invisible, because it will not be part of any aggregate contact.

所以问题是我无法再在我的应用程序中显示此联系人的数据,因为我不知道如何从联系人数据库中检索它们。如果有人知道如何处理这种情况,我将不胜感激任何建议。谢谢

最佳答案

因此,经过更细致的搜索,我找到了在我的应用程序中检索任何 RAW_CONTACT 数据的方法,而不管它是否已从其他应用程序中删除。

使用 RawContacts.Entity API 完成这项工作。

以前我尝试使用这样的逻辑来检索联系人的数据:

public Cursor getContactData(long rawContactId) {
return getContentResolver().query(ContactsContract.Data.CONTENT_URI, null,
ContactsContract.Data.RAW_CONTACT_ID + "=" + rawContactId, null);
}

对于已删除的联系人,此方法始终返回 null

但使用 RawContacts.Entity这样的方式:

public Cursor getContactData(long rawContactId) {
Uri rawContactUri = ContentUris.withAppendedId(RawContacts.CONTENT_URI, id);
rawContactUri = Uri.withAppendedPath(rawContactUri, RawContacts.Entity.CONTENT_DIRECTORY);

return getResolver().query(rawContactUri, null, null, null);
}

允许以适当的权限获取应用程序内部的联系人数据,无论它是否被 3d 方应用程序删除。

关于Android 原生联系人应用程序删除每个帐户联系人,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17616885/

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