java.lang.illegalargumentexception - ContentResolver

2014. 1. 10. 20:24Programing/Android / Java

ContentResolver를 사용해서 연락처의 내용을 확인하려고 하니,

특정 폰에서 java.lang.illegalargumentexception 문제가 발생하는 경우가 생겼습니다.

원인은 특정 회사마다 권한 설정을 다르게 했기 때문인 것으로 판단이 됩니다.

해결책도 역시 간단했습니다.


기존에는 아래와 같이 ContactsContract.PhoneLookup.CONTENT_FILTER_URI를 사용했었는데,

팬택의 경우 해당 URI 접근이 되지 않았습니다.

Uri uri = Uri.withAppendedPath(ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(number));

그래서 동일하지만 조금 다르게, ContactsContract.Contacts.CONTENT_URI를 사용했더니 문제가 바로 해결 되었습니다.

Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, Uri.encode(number));    


도움이 되었으면 합니다.

추가로 제가 사용했던 코드도 함께 공유 합니다.



    public String getContactDisplayNameByNumber(String number) {
        Uri mUri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, Uri.encode(number));
        String mName = "";

        ContentResolver mContentResolver = getContentResolver();
        Cursor mContactCursor = mContentResolver.query(mUri, 
                    new String[] {BaseColumns._ID, ContactsContract.PhoneLookup.DISPLAY_NAME }, 
                    null, null, null);

        try {
            if (mContactCursor != null && mContactCursor.getCount() > 0) {
                mContactCursor.moveToNext();
                mName = mContactCursor.getString(mContactCursor.getColumnIndex(ContactsContract.Data.DISPLAY_NAME));
            }
            else
            {
                mName = number;
            }
        } finally {
            if (mContactCursor != null) {
                mContactCursor.close();
            }
        }
        mContactCursor.close();
        return mName;
    }