안드로이드 연락처 앱에 있는 연락처를 선택한 것만 삭제하는 메소드(bulkDelete) 와 모든 연락처를 삭제하는 메소드다.
public class ContactHelper {
// 연락처 총개수 파악 public static int getContactsTotalCount(ContentResolver contactHelper) { Cursor cursor = contactHelper.query(ContactsContract.Contacts.CONTENT_URI, null, null, null, null); return cursor.getCount(); }
public static void bulkDelete(ContentResolver contactHelper,long[] ids){ if (ids.length == 0) { // 삭제할 데이터가 없으면 return; } StringBuilder where=new StringBuilder(); where.append(RawContacts.CONTACT_ID); where.append(" IN ("); where.append(Long.toString(ids[0])); for (int i=1; i < ids.length; i++) { where.append(','); where.append(Long.toString(ids[i])); } where.append(')'); try { contactHelper.delete(RawContacts.CONTENT_URI,where.toString(),null); } catch (Exception e) { e.printStackTrace(); } }
// 모든 연락처 삭제 public static void deleteAllContact(ContentResolver contactHelper) { contactHelper.delete(RawContacts.CONTENT_URI, null, null); } }
|
사용법
long[] ids = new long[]{16258,15265,15441,15542,16278};
ContactHelper.bulkDelete(getContentResolver(), ids);
위와 같이 수동으로 해당 CONTACT_ID를 직접 적어주고 테스트를 했다.
하지만 앱으로 구현한다면, CustomListView 에서 체크박스를 선택한 것만 삭제되도록 구현하면 될 것이다.
체크한 것만 ArrayList 에 담고 ArrayList 를 배열로 변환한 다음에
ContactHelper.bulkDelete(getContentResolver(), ids);
를 실행하면 될 것이다.
다만 IN 안에 들어가는 인수의 개수를 어느 범위까지 허용하는지 여부는 테스트를 안해봐서 장담할 수가 없다.
성명(display_name) 과 전화번호, CONTACT_ID 를 구할 수 있는 Cursor 메소드
// Display Name 이 포함된 모든 Cursor 반환 public static Cursor getContactCursorFromDisplayNameLIKE(ContentResolver contactHelper, String display_name) {
// 검색할 칼럼 정하기, null 이면 모든 필드 String[] projection = {Phone.CONTACT_ID,Phone._ID, Phone.DISPLAY_NAME, Phone.NUMBER}; // Cursor를 얻기 위한 쿼리 조건 String where = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " like \'%" + display_name + "%\'"; String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"; Cursor cursor = null;
try { if (display_name != null && !display_name.equals("")) { cursor = contactHelper.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, where, null, sortOrder); } else { cursor = contactHelper.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, projection, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); } cursor.moveToFirst(); } catch (Exception e) { e.printStackTrace(); }
return cursor; }
|
public class MainActivity extends AppCompatActivity { private ArrayList<String> contactRawContactID; private ArrayList<String> contactDataID; private ArrayList<String> contactNames; private ArrayList<String> contactNumbers; ArrayAdapter<String> adapter; ListView listView; private Cursor cursor;
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main);
listView = (ListView) findViewById(R.id.list); TextView tv_getCount = (TextView) findViewById(R.id.tv_getContactCount); tv_getCount.setText("총 " + String.valueOf(ContactHelper.getContactsTotalCount(getContentResolver())) + " 개");
contactRawContactID = new ArrayList<String>(); contactDataID = new ArrayList<String>(); contactNames = new ArrayList<String>(); contactNumbers = new ArrayList<String>();
cursor = ContactHelper.getContactCursorFromDisplayNameLIKE(getContentResolver(), ""); cursor.moveToFirst(); while (!cursor.isAfterLast()) { contactRawContactID.add(cursor.getString(0)); contactDataID.add(cursor.getString(1)); contactNames.add(cursor.getString(2)); contactNumbers.add(cursor.getString(3)); cursor.moveToNext(); }
adapter = new MyAdapter(this, android.R.layout.simple_list_item_1, R.id.tvNameMain, contactNames); listView.setAdapter(adapter);
}
private class MyAdapter extends ArrayAdapter<String> {
public MyAdapter(Context context, int resource, int textViewResourceId, ArrayList<String> conNames) { super(context, resource, textViewResourceId, conNames); }
@Override public View getView(int position, View convertView, ViewGroup parent) { View row = setList(position, parent); return row; }
private View setList(final int position, ViewGroup parent) { LayoutInflater inf = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View row = inf.inflate(R.layout.liststyle, parent, false);
TextView tvRawContactID = (TextView) row.findViewById(R.id.tvRawContactID); TextView tvDataID = (TextView) row.findViewById(R.id.tvDataID); TextView tvName = (TextView) row.findViewById(R.id.tvNameMain); TextView tvNumber = (TextView) row.findViewById(R.id.tvNumberMain);
tvRawContactID.setText("RawContact_ID : " + contactRawContactID.get(position)); tvDataID.setText("Data_ID : " + contactDataID.get(position)); tvName.setText(contactNames.get(position)); tvNumber.setText("No: " + contactNumbers.get(position));
return row; } } } |