標籤:
android系統的連絡人資料庫是非常的複雜,並不是一個簡單的表就能搞定的。
要簡單的查詢使用者名稱和電話號碼,首先要查詢到姓名,然後再進局姓名去查詢電話號碼,一個姓名可能對應多個電話號碼:
// These are the Contacts rows that we will retrieve. static final String[] CONTACTS_SUMMARY_PROJECTION = new String[]{ ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME, ContactsContract.Contacts.CONTACT_STATUS, ContactsContract.Contacts.CONTACT_PRESENCE, ContactsContract.Contacts.PHOTO_ID, ContactsContract.Contacts.LOOKUP_KEY,} Uri baseUri = ContactsContract.Contacts.CONTENT_URI; // Now create and return a CursorLoader that will take care of // creating a Cursor for the data being displayed. String select = "((" + ContactsContract.Contacts.DISPLAY_NAME + " NOTNULL) AND (" + ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1) AND (" + ContactsContract.Contacts.DISPLAY_NAME + " != ‘‘ ))"; return new CursorLoader(ContactActivity.this.getApplicationContext(), baseUri, CONTACTS_SUMMARY_PROJECTION, select, null, ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");List<Map<String, String>> list = new ArrayList<>(); while (data.moveToNext()) { Map<String, String> map = new HashMap(); String name = data.getString(data.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); String ContactId = data.getString(data.getColumnIndex(ContactsContract.Contacts._ID)); Cursor phone = getContentResolver().query( ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=" + ContactId, null, null); while (phone.moveToNext()) { String Number = phone.getString(phone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); if (Number != null) { map.put(name, Number); } } list.add(map); }
如何擷取android系統中的連絡人和電話號碼