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 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 | package com.myapplication; import android.app.Activity; import android.content.Intent; import android.database.Cursor; import android.graphics.Bitmap; import android.net.Uri; import android.provider.MediaStore; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.ImageView; import java.io.FileNotFoundException; import java.io.IOException; public class MainActivity extends AppCompatActivity { Button btnGetImage; ImageView imgPicture; private final int REQ_CODE = 200; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); imgPicture = (ImageView)findViewById(R.id.imgPicture); btnGetImage =(Button)findViewById(R.id.btnGetImage); btnGetImage.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(Intent.ACTION_PICK); //선택한 데이터를 반환해주는 Intent intent.setType(MediaStore.Images.Media.CONTENT_TYPE); //이미지타입을 원함 intent.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI); //URI 제공 startActivityForResult(intent,REQ_CODE); //구분하기위한 코드번호랑 같이보냄 } }); } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if(requestCode == REQ_CODE) { if(resultCode == Activity.RESULT_OK) { try{ String name_str = getImageNameToUri(data.getData()); Bitmap image_bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(),data.getData()); imgPicture.setImageBitmap(image_bitmap); }catch(FileNotFoundException e) { }catch(IOException e) { }catch(Exception e) { } } } } private String getImageNameToUri(Uri data) { String[] proj = {MediaStore.Images.Media.DATA}; Cursor cursor = managedQuery(data,proj,null,null,null); int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA); cursor.moveToFirst(); String imgPath = cursor.getString(column_index); String imgName = imgPath.substring(imgPath.lastIndexOf("/")+1); return imgName; } } | cs |
버튼을 눌렀을 때 Intent를 생성하여 보내는데,
타입과 데이터를 명시해 줌으로써 갤러리에 접근하는 것을 알려주고, 경로값을 가져오는데 사용할 URI를 받을 수 있도록 한다.
다른 Activity에서 선택한 정보를 가져오기 위해서는 startActivityForResult메소드를 써야하는데 그 이유는 아래와 같다.
requestCode가 0보다 클 경우 호출한 Activity가 종료될 때 현재 Activity가 onActivityResult()메소드에 반환이 되는 것이다.
onResume() 메소드 이전에 호출되는 onActivityResult 매개변수 속성 설명은 아래와 같다.
requestCode : startActivityForResult()메소드에서 보낸 코드값
resultCode : RESULT_CANCELED 나 RESULT_OK 값이 반환됨. (직접 만든 액티비티에선 setResult로 선택가능)
data : 인탠트 타입으로 오는 데이터.
먼저 requestCode가 같은지 확인하고, 잘 작동되었는지 확인(resultCode가 RESULT_OK인지 확인)
한뒤 data를 처리를 하면된다.
도움자료
http://ankyu.entersoft.kr/Lecture/android/gallery_01.asp
'프로그래밍 > Java, Android' 카테고리의 다른 글
(안드로이드) WebView를 이용한 Simple Application (0) | 2016.07.10 |
---|---|
(안드로이드) 제목창, 타이틀 없애는 방법 (0) | 2016.07.10 |
(Java) Thread를 이용한 심플 경마 (0) | 2016.07.10 |
(안드로이드) 업그레이드된 계산기 프로그램 (0) | 2016.07.10 |
(Eclipse) Class Diagram 사용하기 (0) | 2016.07.10 |