티스토리 뷰

직전 포스팅에서 다뤘던 예제를 조금만 수정하여 앨범에서 데이터를 가져오는 대신, 연락처 목록에서 연락처를 가져와 보자.

 

연락처을 열람하고 데이터를 가져오기 위해서는 READ_CONTACTS 권한이 필요하다.

 

직전 포스팅에서 대부분의 내용은 다뤘으므로, 바로 코드만 확인해보자.


◎MainActivity.java

package com.example.ssssssdead;

import android.annotation.SuppressLint;
import android.app.Activity;
import android.content.ContentResolver;
import android.content.Intent;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.provider.ContactsContract;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.TextView;
import androidx.activity.result.ActivityResult;
import androidx.activity.result.ActivityResultCallback;
import androidx.activity.result.ActivityResultLauncher;
import androidx.activity.result.contract.ActivityResultContracts;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import com.yanzhenjie.permission.Action;
import com.yanzhenjie.permission.AndPermission;
import com.yanzhenjie.permission.runtime.Permission;

import java.io.InputStream;
import java.util.List;

public class MainActivity extends AppCompatActivity {

    TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        AndPermission.with(this)
                .runtime()
                .permission(Permission.READ_CONTACTS)
                .onGranted(new Action<List<String>>() {
                    @Override
                    public void onAction(List<String> permissions) {
                    }
                })
                .onDenied(new Action<List<String>>() {
                    @Override
                    public void onAction(List<String> permissions) {
                    }
                })
                .start();

        textView = findViewById(R.id.textView);


        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                chooseContacts();
            }
        });
    }

    public void chooseContacts() {
        //연락처 화면을 띄우기 위한 인텐트
        Intent contactPickerIntent = new Intent(Intent.ACTION_PICK,
                ContactsContract.Contacts.CONTENT_URI);

        mGetContent.launch(contactPickerIntent);
    }


    ActivityResultLauncher<Intent> mGetContent = registerForActivityResult(
        new ActivityResultContracts.StartActivityForResult(),
        new ActivityResultCallback<ActivityResult>() {
            @Override
            public void onActivityResult(ActivityResult result) {
                if(result.getResultCode() == Activity.RESULT_OK) {
                    Intent data = result.getData();

                    Uri contactsUrl = data.getData();

                    // 선택한 연락처의 id 값 확인하기기
                    String id = contactsUrl.getLastPathSegment();
                    getContacts(id);
                }
            }
        });

    @SuppressLint("Range")
    public void getContacts(String id) {
        Cursor cursor = null;
        String name = "";

        try {
            cursor = getContentResolver().query(ContactsContract.Data.CONTENT_URI,
                        null,
                        ContactsContract.Data.CONTACT_ID + "=?",
                    new String[] {id},
                    null
                    );
            if(cursor.moveToFirst()) {
                name = cursor.getString(cursor.getColumnIndex((ContactsContract.Data.DISPLAY_NAME)));
                
                textView.append(name+"\n");

                String columns[] = cursor.getColumnNames();
                for(String column : columns) {
                    int index = cursor.getColumnIndex(column);
                    String columnOutput = ("#" + index + " -> [" + column + "] " + cursor.getString(index) + "\n");
                    textView.append(columnOutput);
                }
                cursor.close();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }


}

Comments