Android - 如何通过组选择删除联系人

时间:2011-12-15 11:31:45

标签: android android-contacts

我正在尝试删除已确定群组的所有联系人。

我已使用GROUP_ROW_ID = 987

创建了群组

所以我应该删除GROUP_ROW_ID = 987的联系人!

我不知道如何删除它们。 任何人都可以帮助我吗?

3 个答案:

答案 0 :(得分:0)

删除记录

要删除单个记录,请使用特定行的URI调用{ContentResolver.delete()

要删除多行,请使用要删除的记录类型的URI(例如,ContentResolver.delete())和定义要删除的行的SQL WHERE子句调用android.provider.Contacts.People.CONTENT_URI。 (注意:如果要删除常规类型,请确保包含有效的WHERE子句,否则您可能会删除超出预期的记录!)。

Be careful with deleting Contacts! Deleting an aggregate contact deletes all constituent raw contacts. The corresponding sync adapters will notice the deletions of their respective raw contacts and remove them from their back end storage.

Specify READ_CONTACTS and WRITE_CONTACTS permissions in your AndroidManifest.xml.

遍历每个联系人并删除每条记录:Content Providers

Contacts

答案 1 :(得分:0)

private final String MY_QUERY = "SELECT * FROM table_a a INNER JOIN table_b b ON a.id=b.other_id WHERE b.property_id=?";

db.rawQuery(MY_QUERY, new String[]{String.valueOf(propertyId)});

rawQuery

我在一个查询中加入两个表的另一个例子

private static final String JOIN_QUERY=
 "SELECT * FROM Employee JOIN User ON userId = employeeUserId";

答案 2 :(得分:0)

如果你还没有解决它,我就是这样做的。我绝不建议这是一个有效的解决方案。这只是一个直接的解决方案。

首先查找具有特定组ID的所有联系人ID。然后为每个要删除的联系人创建ContentProviderOperation,最后应用删除操作列表。

private void deletaAllInGroup(Context context, long groupId)
   throws RemoteException, OperationApplicationException{
    String where = String.format("%s = ?", GroupMembership.GROUP_ROW_ID);
    String[] whereParmas = new String[] {Long.toString(groupId)};
    String[] colSelection = new String[] {Data.CONTACT_ID};

    Cursor cursor = context.getContentResolver().query(
            Data.CONTENT_URI, 
            colSelection, 
            where, 
            whereParmas, 
            null);

    ArrayList<ContentProviderOperation> operations = 
        new ArrayList<ContentProviderOperation>();

    // iterate over all contacts having groupId 
    // and add them to the list to be deleted
    while(cursor.moveToNext()){ 
        String where = String.format("%s = ?", RawContacts.CONTACT_ID);
        String[] whereParams = new String[]{Long.toString(cursor.getLong(0))};

        operations.add(ContentProviderOperation.newDelete(RawContacts.CONTENT_URI)
        .withSelection(where, whereParams)
        .build());
    }

    context.getContentResolver().applyBatch(
        ContactsContract.AUTHORITY, operations );
}