앱 제공자를 이용한 앨범과 연락처 조회하기
MainActivity.java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
public class MainActivity extends AppCompatActivity {
ImageView imageView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.imageView);
Button button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v){
openGallery();
}
});
}
public void openGallery(){
Intent intent = new Intent();
intent.setType(" image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent, 101);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 101){
if(resultCode == RESULT_OK){
Uri fileUri = data.getData();
ContentResolver resolver = getContentResolver();
try{
// ContentResolver 객체의 openInoutStream 메서드로 파일 읽어 들이기
InputStream instream = resolver.openInputStream(fileUri);
Bitmap imgBitmap = BitmapFactory.decodeStream(instream);
imageView.setImageBitmap(imgBitmap);
instream.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
}
}
openGallery 메서드 안에서는 인텐트 객체를 하나 만들고 Intent.ACTION_GET_CONTENT라는 액션 정보를 설정한다. setType 메서드를 이용해 image/*라는 값을 설정한다. 이렇게 하면 MIME 타입이 image로 시작하는 데이터를 가져오라는 의미이다.
startActivityForResult
메서드를 호출하면서 이 인텐트 객체를 파라미터로 전달하면 앨범에서 사진을 선택할 수 있는 화면을 띄워주게 된다.
이미지 파일은 보통 SD 카드에 저장 되므로 매니페스트 파일에 READ_EXTERNAL_STORAGE와 WRITE_EXTERNAL_STORAGE 권한을 추가한다.
이 권한은 위험 권한이므로 위험 권한을 부여하기 위한 코드를 추가한다.
AndroidMainfest.xml
1
2
3
4
5
6
7
8
9
10
11
12
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.techtown.album">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
....
결과