Android本机联系人应用程序删除每个帐户联系人

Android本机联系人应用程序删除每个帐户联系人,android,android-contacts,android-syncadapter,Android,Android Contacts,Android Syncadapter,我的问题是,我试图禁止原生Android联系人应用程序从设备中删除我的应用程序的联系人(由我的应用程序帐户类型指定) 为此,我指定了我自己的SyncAdapter,它有自己的服务,它是SyncAdapter.xml中描述的元数据。supportsupload的值设置为false(这样我就说我的应用程序创建的联系人是只读的) 但是,当我尝试从standard Contacts应用程序中删除应用程序的联系人时,我会收到一条消息,上面写着: 您不能从只读帐户中删除联系人,但可以隐藏 在联系人列表中列出

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

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

但是,当我尝试从standard Contacts应用程序中删除应用程序的联系人时,我会收到一条消息,上面写着:

您不能从只读帐户中删除联系人,但可以隐藏 在联系人列表中列出它们

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

返回的游标为null,因为表中没有与此联系人的关联的行。我还检查设备上是否存在联系人,以查找 它是表中的标志值,并观察到它已设置为1,这意味着联系人已被删除

正如官方文件所述:

某些同步适配器是只读的,这意味着它们只进行同步 对手机进行服务器端更改,但不是相反。如果其中一个 原始联系人被标记为删除,它将保留在手机上。 然而,它实际上是无形的,因为它不是一部分 任何聚合接触的


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

因此,经过更仔细的搜索,我找到了在我的应用程序中检索任何
原始联系人
数据的方法,而不考虑它是否从其他应用程序中删除

使用
RawContacts.Entity
API完成此任务

之前,我尝试使用以下逻辑检索联系人的数据:

public Cursor getContactData(long rawContactId) {
    return getContentResolver().query(ContactsContract.Data.CONTENT_URI, null,
            ContactsContract.Data.RAW_CONTACT_ID + "=" + rawContactId, null);
}
对于已删除的联系人,此方法始终返回
null

但通过这种方式:

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 party应用程序删除。

因此,经过更仔细的搜索,我找到了在我的应用程序中检索任何
原始联系人的数据的方法,而不管它是否从其他应用程序中删除

使用
RawContacts.Entity
API完成此任务

之前,我尝试使用以下逻辑检索联系人的数据:

public Cursor getContactData(long rawContactId) {
    return getContentResolver().query(ContactsContract.Data.CONTENT_URI, null,
            ContactsContract.Data.RAW_CONTACT_ID + "=" + rawContactId, null);
}
对于已删除的联系人,此方法始终返回
null

但通过这种方式:

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 party应用程序删除。

我很惊讶这竟然是真的。我很困惑它是否与我的想法相冲突,我很惊讶这是真的。我感到困惑的是,它与