正常情况下,删除联系人可以使用如下代码:
getContentResolver().delete(ContactsContract.RawContacts.CONTENT_URI, ContactsContract.Contacts.DISPLAY_NAME + "=?", new String[]{name});
但是在MIUI中,却失败了,弹出如下对话框:
MIUI系统对话框通过系统log可以发现:
pkg: com.android.providers.contacts activity: com.miui.providers.contacts.ContactsDeletionDialog。
即这是系统联系人数据库弹出的界面,且是MIUI定制增加的,并非AOSP逻辑。
从对话框内容可以看出,MIUI为了保护信息安全,禁止第三方app删除联系人。难道小米真的不允许第三方app删除联系人?不应该啊,很多第三方应用应该都是可以的。联系人主要涉及"contacts"、"raw_contacts"表,URI换成 ContactsContract.Contacts.CONTENT_URI 也不行,只是没有弹框了,但依然失败。最后,换成 ContactLookupUri 成功了:
Uri contactUri = ContactsContract.RawContacts.getContactLookupUri(getContentResolver(), ContentUris.withAppendedId(ContactsContract.RawContacts.CONTENT_URI,rawContactId));
getContentResolver().delete(contactUri,null, null);
所以,小米手机上,必须使用ContactLookupUri 才能成功删除联系人。
网友评论