7

現在、このコードは機能しています ops.add(ContentProviderOperation .newDelete(ContactsContract.Data.CONTENT_URI) .withSelection(ContactsContract.Data.RAW_CONTACT_ID+"=?",new String[] {sid}).build());

ただし、不明なレコードが作成され、削除された連絡先のようです。適切に機能させるために何か必要ですか?

4

3 に答える 3

8

私はそれをこのように機能させました:

public static boolean deleteContact(Context ctx, String phone, String name) {
    Uri contactUri = Uri.withAppendedPath(PhoneLookup.CONTENT_FILTER_URI, Uri.encode(phone));
    Cursor cur = ctx.getContentResolver().query(contactUri, null, null, null, null);
    try {
        if (cur.moveToFirst()) {
            do {
                if (cur.getString(cur.getColumnIndex(PhoneLookup.DISPLAY_NAME)).equalsIgnoreCase(name)) {
                    String lookupKey = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));
                    Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_LOOKUP_URI, lookupKey);
                    ctx.getContentResolver().delete(uri, null, null);
                    return true;
                }

            } while (cur.moveToNext());
        }

    } catch (Exception e) {
        System.out.println(e.getStackTrace());
    }
    return false;
}
于 2012-11-15T07:20:07.010 に答える
0

で説明したように

http://developer.android.com/reference/android/provider/ContactsContract.RawContacts.html

RawContacts の CONTACT_ID フィールドは、集約された連絡先へのリンクです。経由で RawContact を削除ContentProviderOperation.newDeleteすると、このフィールドが null になります (私が見つけたように)。RawContact が実際に削除されるのは、Android の同期と集計次第です。特定のアカウントから特定の連絡先を削除する必要があったため、集約された連絡先ではなく、RawContacts を介して削除することができました。RawContact が削除されたかどうかを確認するには、次を使用しました。

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

    ContentResolver contentResolver = getContentResolver();

    Cursor curRawContacts = contentResolver.query(ContactsContract.RawContacts.CONTENT_URI, null,
            ContactsContract.RawContacts.ACCOUNT_TYPE + " = ? AND " + ContactsContract.RawContacts.ACCOUNT_NAME
                    + " = ?", new String[]{"MYTYPE", MyAccount}, null);

    int size = curRawContacts.getCount();


    for (int i = 0; i < size; i++) {

        curRawContacts.moveToPosition(i);

        //getColumnIndexOrThrow(String columnName)
        //Returns the zero-based index for the given column name, or throws IlleidRawContactgalArgumentException if the column doesn 't exist.
        String idRawContact = curRawContacts.getString(curRawContacts.getColumnIndexOrThrow(ContactsContract.RawContacts._ID));
        String idContact = curRawContacts.getString(curRawContacts.getColumnIndexOrThrow(ContactsContract.RawContacts.CONTACT_ID));

        // if link to aggregated contact is null, than raw contact had already been deleted
        if (idContact != null) {
于 2015-12-14T12:44:18.957 に答える