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 else
intent.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()를 오버 라이드 해야 합니다.
@Override
protected
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 null
cursor.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 else
intent.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()를 오버 라이드 해야 합니다.
@Override
protected
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 null
cursor.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 |