Button클릭 시 image/* 파일들 선택할 수 있는 창 열기
<요약>
OnCreate 부문에 Button onClickListener을 추가 하고, Intent를 활용하여
전체적인 파일을 가져올 수 있게 합니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button openimg = (Button)findViewById(R.id.openimg);
openimg.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);
}
});
}
때때로 Android애플리케이션에서 사용자가 선택한 후에 응용 프로그램에 의해 표시되는 갤러리에서 이미지를 선택할 수 있는 갤러리에서 이미지를 선택할 수 있습니다.
이 글에서는 사용자가 모든 앱에서 이미지를 선택할 수 있는 단일 인터페이스를 호출하는 방법을 살펴보겠습니다.(예:갤러리, 사진, ESFileExplorer등)및 폴더(GoogleDrive, 최근, 다운로드 등)를 인첸트를 사용합니다.
갤러리 이미지 갤러리 시작
사용자가 다음과 같은 의도로 다음과 같은 의도를 사용할 수 있도록 하려면 사용자가 이미지를 선택할 수 있습니다.
Intent intent = new Intent();// Show only images, no videos or anything elseintent.setType("image/*");intent.setAction(Intent.ACTION_GET_CONTENT);// Always show the chooser (if there are multiple options available)startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);PICK_IMAGE_REQUEST는 인스턴스 변수로 정의된 요청 코드입니다.
private int PICK_IMAGE_REQUEST = 1;
Activity/Fragment에서 선택한 영상 표시
일단 선택이 이루어지면 ImageView 사용자 인터페이스에서 이미지를 플립 차트에 표시합니다.
이를 위해서는 onActivityResult()를 오버 라이드 해야 합니다.
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { Uri uri = data.getData(); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); // Log.d(TAG, String.valueOf(bitmap)); ImageView imageView = (ImageView) findViewById(R.id.imageView); imageView.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } }}
이렇게 배치하려면 다음과 같은 작업을 수행해야 합니다.
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" />갤러리에서 선택할 때 선택한 사진이 UI에 표시되고 선택한 사진이 어떻게 표시되는지 확인할 수 있습니다.
컨텐츠 URI에서 절대 파일 경로 가져오기
Uri uri = data.getData();String[] projection = { MediaStore.Images.Media.DATA };Cursor cursor = getContentResolver().query(uri, projection, null, null, null);cursor.moveToFirst();Log.d(TAG, DatabaseUtils.dumpCursorToString(cursor));int columnIndex = cursor.getColumnIndex(projection[0]);String picturePath = cursor.getString(columnIndex); // returns nullcursor.close();그러면 커서에서 반환된 MediaStore.Images.Media.DATA 값이 null이라는 것을 알 수 있습니다.
이 문제(및 수정 사항)는 다음과 같은 스레드 스레드에서 해결되었습니다.
- http://stackoverflow.com/questions/19834842/android-gallery-on-kitkat-returns-different-uri-for-intent-action-get-content
- http://stackoverflow.com/questions/20260416/retrieve-absolute-path-when-select-image-from-gallery-kitkat-android
Button클릭 시 image/* 파일들 선택할 수 있는 창 열기
<요약>
OnCreate 부문에 Button onClickListener을 추가 하고, Intent를 활용하여
전체적인 파일을 가져올 수 있게 합니다.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button openimg = (Button)findViewById(R.id.openimg);
openimg.setOnClickListener(new Button.OnClickListener(){
public void onClick(View view){
Intent intent = new Intent(Intent.ACTION_GET_CONTENT);
intent.setType("image/*");
startActivity(intent);
}
});
}
때때로 Android애플리케이션에서 사용자가 선택한 후에 응용 프로그램에 의해 표시되는 갤러리에서 이미지를 선택할 수 있는 갤러리에서 이미지를 선택할 수 있습니다.
이 글에서는 사용자가 모든 앱에서 이미지를 선택할 수 있는 단일 인터페이스를 호출하는 방법을 살펴보겠습니다.(예:갤러리, 사진, ESFileExplorer등)및 폴더(GoogleDrive, 최근, 다운로드 등)를 인첸트를 사용합니다.
갤러리 이미지 갤러리 시작
사용자가 다음과 같은 의도로 다음과 같은 의도를 사용할 수 있도록 하려면 사용자가 이미지를 선택할 수 있습니다.
Intent intent = new Intent();// Show only images, no videos or anything elseintent.setType("image/*");intent.setAction(Intent.ACTION_GET_CONTENT);// Always show the chooser (if there are multiple options available)startActivityForResult(Intent.createChooser(intent, "Select Picture"), PICK_IMAGE_REQUEST);PICK_IMAGE_REQUEST는 인스턴스 변수로 정의된 요청 코드입니다.
private int PICK_IMAGE_REQUEST = 1;
Activity/Fragment에서 선택한 영상 표시
일단 선택이 이루어지면 ImageView 사용자 인터페이스에서 이미지를 플립 차트에 표시합니다.
이를 위해서는 onActivityResult()를 오버 라이드 해야 합니다.
@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == PICK_IMAGE_REQUEST && resultCode == RESULT_OK && data != null && data.getData() != null) { Uri uri = data.getData(); try { Bitmap bitmap = MediaStore.Images.Media.getBitmap(getContentResolver(), uri); // Log.d(TAG, String.valueOf(bitmap)); ImageView imageView = (ImageView) findViewById(R.id.imageView); imageView.setImageBitmap(bitmap); } catch (IOException e) { e.printStackTrace(); } }}
이렇게 배치하려면 다음과 같은 작업을 수행해야 합니다.
<ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageView" />갤러리에서 선택할 때 선택한 사진이 UI에 표시되고 선택한 사진이 어떻게 표시되는지 확인할 수 있습니다.
컨텐츠 URI에서 절대 파일 경로 가져오기
Uri uri = data.getData();String[] projection = { MediaStore.Images.Media.DATA };Cursor cursor = getContentResolver().query(uri, projection, null, null, null);cursor.moveToFirst();Log.d(TAG, DatabaseUtils.dumpCursorToString(cursor));int columnIndex = cursor.getColumnIndex(projection[0]);String picturePath = cursor.getString(columnIndex); // returns nullcursor.close();그러면 커서에서 반환된 MediaStore.Images.Media.DATA 값이 null이라는 것을 알 수 있습니다.
이 문제(및 수정 사항)는 다음과 같은 스레드 스레드에서 해결되었습니다.
- http://stackoverflow.com/questions/19834842/android-gallery-on-kitkat-returns-different-uri-for-intent-action-get-content
- http://stackoverflow.com/questions/20260416/retrieve-absolute-path-when-select-image-from-gallery-kitkat-android
요청에 의해 호출된 앱에서 다양한 섹션(탐색 드로어에 있는)을 선택할 때마다 다양한 종류의 Content URIs가 반환됩니다.
갤러리(앱)섹션의 선택 항목에서 얻을 수 있는 것은 다음과 같습니다.
Recents(또는 일반적으로 내 생각)에서는 다음과 같은 이점을 얻을 수 있습니다.
GoogleDrive에서 선택할 때는 다음과 같은 URI를 사용합니다.
또한 사진(앱)섹션에서 다음을 수행합니다(URL인코딩됨).
버튼 위치 내가 원하는 곳에 설정하기
처음 만들면 스튜디오 안에서는 정상작동하나, 핸드폰을 활용할 시 error문구와 함꼐 0,0으로 이동이 됩니다.
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
tools:layout_editor_absoluteX="62dp"
tools:layout_editor_absoluteY="310dp" />이 구문을
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Button"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.291" />와 같이 설정하고, 디자인 부분에서 위치를 조절해준다면 원하는 위치에 배열할 수 있습니다.
'Computer_IT > Android' 카테고리의 다른 글
| 안드로이드 @Override의 의미 (0) | 2017.06.21 |
|---|---|
| 언제 'public static final String' 을 사용하는 걸까요? (0) | 2017.06.12 |
| [안드로이드 스튜디오] 에러 Crunching Crunsher ~ .png failed 수정 (0) | 2017.05.11 |