如何在Android移动设备上以编程方式删除联系人列表中的所有联系人

6
我希望能在我的应用程序中通过一个按钮按下来删除所有联系人,那么有没有好心的人可以告诉我如何在Android移动设备上通过编程实现一键删除所有联系人?非常感谢您的答复...
实际上,我已经浏览了几个小时,但没有得到任何合适的答案。这就是为什么我需要在这个好论坛中发布我的问题...感谢这样的论坛...

@Federico Culloca 你好 Federico,我认为你一定有答案... :) - ram ji
不,我没有。我编辑你的问题或者在你提交的内容中评论并要求澄清,并不意味着我有答案。抱歉。 - Federico klez Culloca
哇,我为你即将发起的任何恶作剧的受害者感到遗憾。 - Geeky Guy
@Renan 可能并不是恶作剧。我正在做类似的事情,不是为了开玩笑。 - Miguel Ribeiro
3个回答

28

非常简单,这段代码将删除你所有的联系人。

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);
        }

完成。


5

在您的AndroidManifest.xml中指定READ_CONTACTSWRITE_CONTACTS权限。

遍历每个联系人并删除每条记录:内容提供程序

联系人

注意删除联系人!删除聚合联系人会删除所有组成部分原始联系人。相应的同步适配器将注意到其各自原始联系人的删除并将其从其后端存储中删除。

关于权限,请参见权限组:

注意:未来版本的Android SDK可能会将特定权限从一个组移动到另一个组。因此,不要基于这些权限组的结构来构建应用程序的逻辑。
例如,自Android 8.1(API级别27)起,READ_CONTACTS与WRITE_CONTACTS在同一权限组中。如果您的应用程序请求READ_CONTACTS权限,然后请求WRITE_CONTACTS权限,请不要假设系统可以自动授予WRITE_CONTACTS权限。
注意:即使用户已经授予同一组中的其他权限,您的应用程序仍然需要明确请求其需要的每个权限。此外,权限分组可能会在未来的Android发布版本中发生变化。您的代码不应该依赖于一组特定权限在同一组中的逻辑。

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();
        }
    }

享受吧!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接