Home Cotent Provider 이용하여 앨범 사진 가져오기
Post
Cancel

Cotent Provider 이용하여 앨범 사진 가져오기

앱 제공자를 이용한 앨범과 연락처 조회하기

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"
		....

결과

스크린샷 2022-01-28 오후 11 52 25

This post is licensed under CC BY 4.0 by the author.