소근소근

안드로이드 스튜디오 휴대폰 주소록 불러오기 [AndroidStudio-JAVA] 본문

AndroidStudio

안드로이드 스튜디오 휴대폰 주소록 불러오기 [AndroidStudio-JAVA]

JJureng 2021. 7. 4. 23:42
728x90
반응형
SMALL

 

<uses-permission android:name="android.permission.READ_CONTACTS"/>

먼저, AndroidManifest.xml에 이렇게 추가한다. 권한 설정을 하기 위해서이다.

이렇게 하고 실행해도 에러가 떠서 보았더니, 휴대폰 설정에서 앱에서 주소록 권한 허용을 따로 해주었더니 제대로 실행되었다.

ContentResolver cr = getContentResolver();
Cursor cur = cr.query(ContactsContract.Contacts.CONTENT_URI , null ,null, null, null);

if(cur.getCount()>0){
    String line = "";
    while(cur.moveToNext()){
        int id = cur.getInt(cur.getColumnIndex(ContactsContract.Contacts._ID));
        line = String.format("%4d",id);
        String name = cur.getString(cur.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
        line += " " + name;

        if(("1").equals(cur.getString(cur.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)))) {
            Cursor pCur = cr.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID + "=?", new String[]{String.valueOf(id)}, null);
            int i = 0;
            int pCount = pCur.getCount();
            String[] phoneNum = new String[pCount];
            String[] phoneType = new String[pCount];

            while (pCur.moveToNext()) {
                phoneNum[i] = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                line += " " + phoneNum[i];
                phoneType[i] = pCur.getString(pCur.getColumnIndex(ContactsContract.CommonDataKinds.Phone.TYPE));
                i++;
            }
        }
            numbook.add(line);
            line ="";
        }
    }

주소록 데이터를 numbook 리스트에 저장하는 코드

 

안드로이드에서 앱 간의 데이터를 접근하기 위해서 content provider가 필요하다. 

컨텐트 프로바이더(content provider)는 앱 간의 데이터 공유를 위해 사용된다.

특정 앱이 다른 앱의 데이터에 직접 접근하는 것이 아니라, 컨텐트 프로바이더를 통해 접근하는 것이다.

 

URI를 이용하여 컨텐트 리졸버(content resolver)를 통해 다른 앱의 컨텐트 프로바이더에게 데이터를 요청하면 데이터를 받을 수 있다. 프로바이더는 URIO를 확인하고, 데이터를 리졸버에게 제공하는 구조이다.

 

 

728x90
반응형
LIST