728x90

안드로이드 연락처 앱에 있는 연락처를  선택한 것만 삭제하는 메소드(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;
        }
    }
}


블로그 이미지

Link2Me

,