JDK를 다시 설치하거나 업뎃을 받으면
Remove Override annotation 이란 에러가 @Override 있는 데마다 뜨는 것을
볼 수 있다. 요것은 자바 빌드 버젼이 안 맞아서 그렇다.
따라서 자바 빌드 버젼을 바꿔주면 된다.
Project --> Properties --> Java Compiler --> Enable project specific settings 체크 박스 체크
Compiler compliance settings 리스트박스에서 자신의 자바 버전에 맞게 선택
사용법은 3개의 객체로 계층 구조화 되어 있다는 것을 제외하면 다른 ContentProvider를 사용하는 것과 동일 했다.
주소록 입출력
- Android의 주소록 구조
- android.provider.ContactsContract.Contacts : 최상위 주소록
- android.provider.ContactsContract.RawContacts : 주소록의 출처별 주소록
- android.provider.ContactsContract.Data : 주소록에 포함되어 있는 데이터 (예, 전화번호, 이메일 등)
- 주소록 입출력 권한
<uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.WRITE_CONTACTS" />
- Contacts 조회 (Android 2.2)
StringBuffer buf = null; Cursor contacts = null; long contactID = 0l; buf = new StringBuffer(); // String sortOrder = Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC"; // Cursor contactCursor = managedQuery(uri, projection, selection, selectionArgs, sortOrder); contacts = getContentResolver().query(Contacts.CONTENT_URI, new String[] { Contacts._ID, Contacts.CONTACT_PRESENCE, Contacts.CONTACT_STATUS, Contacts.CONTACT_STATUS_ICON, Contacts.CONTACT_STATUS_LABEL, Contacts.CONTACT_STATUS_RES_PACKAGE, Contacts.CONTACT_STATUS_TIMESTAMP, Contacts.CUSTOM_RINGTONE, Contacts.DISPLAY_NAME, Contacts.HAS_PHONE_NUMBER, Contacts.IN_VISIBLE_GROUP, Contacts.LAST_TIME_CONTACTED, Contacts.LOOKUP_KEY, Contacts.PHOTO_ID, Contacts.SEND_TO_VOICEMAIL, Contacts.STARRED, Contacts.TIMES_CONTACTED }, null, null, null); contacts.moveToFirst(); if (!contacts.isAfterLast()) { do { contactID = contacts.getLong(0); buf.append("--- Contacts Lists ---\n"); for (int idx = 0;idx < contacts.getColumnCount();idx++) { if (contacts.getString(idx) != null) { buf.append(contacts.getColumnName(idx).toUpperCase() + ": " + contacts.getString(idx) + "\n"); } } buf.append("\n"); } while (contacts.moveToNext()); } contacts.close(); return buf.toString();
- RawContacts 조회 (Android 2.2)
StringBuffer buf = null; Cursor rawContacts = null; long rawContactID = 0l; buf = new StringBuffer(); rawContacts = getContentResolver().query(RawContacts.CONTENT_URI, new String[] { RawContacts._ID, RawContacts.ACCOUNT_NAME, RawContacts.ACCOUNT_TYPE, RawContacts.AGGREGATION_MODE, RawContacts.CONTACT_ID, RawContacts.CUSTOM_RINGTONE, RawContacts.DELETED, RawContacts.DIRTY, RawContacts.LAST_TIME_CONTACTED, RawContacts.SEND_TO_VOICEMAIL, RawContacts.SOURCE_ID, RawContacts.STARRED, RawContacts.SYNC1, RawContacts.SYNC2, RawContacts.SYNC3, RawContacts.SYNC4, RawContacts.TIMES_CONTACTED, RawContacts.VERSION }, RawContacts.CONTACT_ID + "=?", new String[] {String.valueOf(contactID)}, null); rawContacts.moveToFirst(); if (!rawContacts.isAfterLast()) { do { rawContactID = rawContacts.getLong(0); buf.append("--- RawContacts Lists ---\n"); for (int pos = 0;pos < rawContacts.getColumnCount();pos++) { if (rawContacts.getString(pos) != null) { buf.append(rawContacts.getColumnName(pos).toUpperCase() + ": " + rawContacts.getString(pos) + "\n"); } } buf.append("\n"); } while (rawContacts.moveToNext()); } rawContacts.close(); return buf.toString();
- Data 조회 (Android 2.2)
StringBuffer buf = null; Cursor contactData = null; buf = new StringBuffer(); contactData = getContentResolver().query(Data.CONTENT_URI, new String[] { Data._ID, Data.MIMETYPE, Data.RAW_CONTACT_ID, Data.IS_PRIMARY, Data.IS_SUPER_PRIMARY, Data.DATA_VERSION, Data.DATA1, Data.DATA2, Data.DATA3, Data.DATA4, Data.DATA5 }, Data.RAW_CONTACT_ID + "=?", new String[] {String.valueOf(rawContactID)}, null); buf.append("--- Data Lists ---\n"); contactData.moveToFirst(); if (!contactData.isAfterLast()) { do { for (int idx = 0;idx < contactData.getColumnCount();idx++) { if (contactData.getString(idx) != null) { buf.append(contactData.getColumnName(idx).toUpperCase() + ": " + contactData.getString(idx) + "\n"); } } buf.append("\n"); } while (contactData.moveToNext()); } contactData.close(); return buf.toString();
- 전화번호 가져오기
import ContactsContract.CommonDataKinds.Phone; Cursor PhoneNumberCursor = getContentResolver().query(Phone.CONTENT_URI, null, null, null, null);
- 연락처 등록
ContentValues values = new ContentValues(); values.put(RawContacts.ACCOUNT_TYPE, "basic"); values.put(RawContacts.ACCOUNT_NAME, "test"); Uri rawContactUri = getContentResolver().insert(RawContacts.CONTENT_URI, values); long rawContactId = ContentUris.parseId(rawContactUri);
- 연락처 수정
int resolver.update(Uri uri, ContentValues values, String where, String selectionArgs[])
- 연락처 삭제
int resolver.delete(Uri url, String where, String selectionArgs[])
- 자신의 번호를 조회
<uses-permission android:name="android.permission.READ_PHONE_STATE" /> TelephonyManager mTelephonyMgr = (TelephonyManager) getSystemService(Context.TELEPHONY_SERVICE); String myNumber = mTelephonyMgr.getLine1Number();