我想从我的应用程序中删除一个按钮上的所有联系人,所以任何一个好人都可以告诉我如何只通过一个按钮按编程方式删除Android手机中的所有联系人?答案将不胜感激......
实际上我在几个小时内冲浪但没有得到任何合适的答案。这就是为什么我需要在这个不错的论坛中发布我的问题...感谢这样的论坛......
答案 0 :(得分:25)
这很简单,此代码将删除所有联系人。
ContentResolver contentResolver = <your app context>.getContentResolver();
Cursor cursor = contentResolver.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null);
while (cursor.moveToNext()) {
String lookupKey = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
contentResolver.delete(uri, null, null);
}
完成。
答案 1 :(得分:5)
在AndroidManifest.xml中指定READ_CONTACTS和WRITE_CONTACTS权限。
遍历每个联系人并删除每条记录:Content Providers
小心删除联系人!删除聚合联系人 删除所有组成原始联系人。相应的同步适配器 会注意到各自原始联系人的删除并删除 他们来自后端存储。
关于permissions,请参阅权限组:
警告:未来版本的Android SDK可能会将特定权限从一个组移动到另一个组。因此,请不要将应用程序的逻辑基于这些权限组的结构。
例如,READ_CONTACTS与Android 8.1(API级别27)中的WRITE_CONTACTS属于同一权限组。如果您的应用请求READ_CONTACTS权限,然后请求WRITE_CONTACTS权限,请不要假设系统可以自动授予WRITE_CONTACTS权限。
注意:即使用户已在同一组中授予了其他权限,您的应用仍需要明确请求其所需的每个权限。此外,将权限分组到组中可能会在将来的Android版本中发生变化。您的代码不应具有依赖于同一组中的一组特定权限的逻辑。
答案 2 :(得分:0)
以下代码段不仅可以帮助您删除contacts
表中的所有联系人,还可以帮助您删除data
和raw_contacts
表中的所有联系人。
private void deleteAllContacts(){
ContentResolver contentResolver = getContentResolver();
Uri rawUri = ContactsContract.RawContacts.CONTENT_URI.buildUpon().appendQueryParameter(ContactsContract.CALLER_IS_SYNCADAPTER, "true").build();
ArrayList<ContentProviderOperation> ops = new ArrayList<>();
ops.add( ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI).
withSelection(ContactsContract.RawContacts._ID + ">? "
,new String[]{ "-1" }).build()); //sets deleted flag to 1
ops.add(ContentProviderOperation.newDelete(rawUri).
withSelection(ContactsContract.RawContacts._ID + ">? "
,new String[]{ "-1" }).build()); //erases
try {
contentResolver.applyBatch( ContactsContract.AUTHORITY, ops );
} catch ( RemoteException e) {
Log.d( "ContactsActivity", "RemoteException --> " + e );
e.printStackTrace();
} catch ( OperationApplicationException e) {
Log.d( "ContactsActivity", "OperationApplicationException --> " + e );
e.printStackTrace();
}
}
享受!