최근에 Lollipop으로 업데이트 한 Nexus 기기에서 이상한 문제가 발생했습니다.Lollipop에서 프로그래밍 방식으로 추가 된 연락처를 삭제할 수 없습니다.
프로그램을 통해 추가 된 연락처는 더 이상 삭제할 수 없습니다. 삭제할 옵션이 없거나, 삭제 된 경우 삭제 자체가 작동하지 않습니다. Funnily만큼, 타사 연락처 응용 프로그램을 다운로드하고 그들을 삭제하는 데 문제가 없습니다.
마찬가지로 프로그램을 통해 삭제할 수 없습니다. 업그레이드 전에 완벽하게 작동하는 모든 것입니다.
이
는 연락처를 삽입하는 데 사용되는 코드입니다 : ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newInsert(ContactsContract.RawContacts.CONTENT_URI)
.withValue(ContactsContract.RawContacts.ACCOUNT_TYPE, null)
.withValue(ContactsContract.RawContacts.ACCOUNT_NAME, null)
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.StructuredName.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredName.DISPLAY_NAME, name)
.build());
if(contact.phone != null && contact.phone !=" "){
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.phone)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
.build());
}
if(contact.phone2 != null && contact.phone2 !=" "){
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.phone2)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
.build());
}
if(contact.phone3 != null && contact.phone3 !=" "){
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.phone3)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_WORK)
.build());
}
if(contact.fax != null && contact.fax !=" "){
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Phone.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Phone.NUMBER, contact.fax)
.withValue(ContactsContract.CommonDataKinds.Phone.TYPE,Phone.TYPE_FAX_WORK)
.build());
}
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.StructuredPostal.STREET,(" ".equals(contact.getAddress())?contact.location:contact.getAddress()))
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.Organization.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Organization.COMPANY,ctx.getResources().getString(R.string.meuhedet))
.build());
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE,ContactsContract.CommonDataKinds.GroupMembership.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.GroupMembership.GROUP_ROW_ID, Long.parseLong(Groupid))
.build());
ByteArrayOutputStream baos = new ByteArrayOutputStream();
Bitmap photo = BitmapFactory.decodeResource(ctx.getResources(),R.drawable.logo_meuhedet);
photo.compress(Bitmap.CompressFormat.PNG, 100, baos);
ops.add(ContentProviderOperation.newInsert(ContactsContract.Data.CONTENT_URI)
.withValueBackReference(ContactsContract.Data.RAW_CONTACT_ID, 0)
.withValue(ContactsContract.Data.MIMETYPE, ContactsContract.CommonDataKinds.Photo.CONTENT_ITEM_TYPE)
.withValue(ContactsContract.CommonDataKinds.Photo.PHOTO, baos.toByteArray())
.build());
try {
ContentProviderResult [] res =ctx.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
rawContactID = ContentUris.parseId(res[0].uri);
Log.d(TAG,"contact added = " + rawContactID);
boolean result = db.saveContactsIntoDatabase(rawContactID, index, ContactKey);
if(res[0].uri!=null && result){
((Activity) ctx).runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(ctx, R.string.successfully_saved_contact, Toast.LENGTH_SHORT).show();
}
});
}
} catch (Exception e) {
}
}
으로 우리는 우리가 다음 삭제에 사용할 수 있도록 ID가 반환 저장 볼 수 있습니다 :
ArrayList<ContentProviderOperation> ops = new ArrayList<ContentProviderOperation>();
ops.add(ContentProviderOperation.newDelete(ContactsContract.RawContacts.CONTENT_URI)
.withSelection(ContactsContract.RawContacts.CONTACT_ID + "=?", new String[]{String.valueOf(rawContactId)})
.build());
try {
ContentProviderResult [] res = ctx.getContentResolver().applyBatch(ContactsContract.AUTHORITY, ops);
Log.d(TAG,"delete count= " + res[0].count);
if(res[0].count > 0 && result){
((Activity) ctx).runOnUiThread(new Runnable() {
@Override
public void run() {
Toast.makeText(ctx, R.string.successfully_deleted_contact, Toast.LENGTH_SHORT).show();
}
});
}
} catch (Exception e) {
}
삭제는 영향을받은 행 수에 대해 0을 반환하므로 분명히 삭제되지 않습니다.
Lollipop에 문제가 있습니까? 아니면 연락처를 추가하는 방식에 문제가 있습니까?
이상한, 코드 비교 (문자열 비교를 수정하는 등 아주 사소한 변화)를 테스트했으며 연락처를 완벽하게 추가 및 삭제합니다 (Nexus 7, Lollipop). 'rawContactId'로 질의하면 그 연락처에 접근 할 수 있습니까? – matiash
내가 시도 :. \t \t 커서 C1 = ctx.getContentResolver() 쿼리 (RawContacts.CONTENT_URI, 새로운 \t \t 새로운 String [] {RawContacts._ID}, \t \t RawContacts.CONTACT_ID + "=?", \t \t을 String [] {String.valueOf (rawContactId)}, null); \t \t Log.d (TAG, "count ="+ c1.getCount()); 리턴 된 제로 라인을 얻는다. – theblitz
이상한 것은 "연락처 +"라는 응용 프로그램을 다운로드했고 연락처 삭제에 문제가 없다는 것입니다. – theblitz