티스토리 뷰
직전 포스팅에서 다뤘던 예제를 조금만 수정하여 앨범에서 데이터를 가져오는 대신, 연락처 목록에서 연락처를 가져와 보자.
연락처을 열람하고 데이터를 가져오기 위해서는 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();
}
}
}
반응형
'Mobile > Android' 카테고리의 다른 글
[Android] Graphic 2: Graphics Examples (0) | 2022.04.16 |
---|---|
[Android] Graphic 1: View 에 그래픽 그리기 (0) | 2022.04.15 |
[Android] startActivityForResult() < deprecated > (0) | 2022.04.14 |
[Android] Content Provider 2: 앨범 조회 (0) | 2022.04.14 |
[Android] Content Provider 1: Content Provider (0) | 2022.04.13 |
Comments
최근에 올라온 글
최근에 달린 댓글
TAG
- await
- AsyncStorage
- redux-thunk
- 파니노구스토
- Async
- 인천 구월동 맛집
- redux
- react
- 맛집
- 인천 구월동 이탈리안 맛집
- Promise
- 정보보안기사 #실기 #정리
- react-native
- javascript
- 이탈리안 레스토랑
- Total
- Today
- Yesterday