반응형
안드로이드 기기 내 앨범에 접근해서 사진을 가져와서 보여주는 예제를 만들어보겠습니다.
이전 글에서 갤러리에 접근해서 ImageView에 선택한 이미지를 보여주는 코드만 추가했습니다.
권한을 요청하는 부분만 필요하신 분은 링크를 통해서 확인해주세요.
1. AndroidManifest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
파일 읽기, 쓰기 권한을 추가합니다.
2. activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<ImageView
android:id="@+id/iv"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@mipmap/ic_launcher_round" />
</androidx.constraintlayout.widget.ConstraintLayout>
3. MainActivity.java
import android.Manifest;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.widget.ImageView;
import android.widget.Toast;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.app.ActivityCompat;
import androidx.core.content.ContextCompat;
import java.io.InputStream;
public class MainActivity extends AppCompatActivity {
ImageView iv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
checkSelfPermission();
iv = findViewById(R.id.iv);
iv.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
//기기 기본 갤러리 접근
intent.setType(MediaStore.Images.Media.CONTENT_TYPE);
//구글 갤러리 접근
//intent.setType("image/*");
intent.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(intent,101);
}
});
}
//권한에 대한 응답이 있을때 작동하는 함수
@Override
public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
//권한을 허용 했을 경우
if(requestCode == 1){
int length = permissions.length;
for (int i = 0; i < length; i++) {
if (grantResults[i] == PackageManager.PERMISSION_GRANTED) {
// 동의
Log.d("MainActivity","권한 허용 : " + permissions[i]);
}
}
}
}
public void checkSelfPermission() {
String temp = "";
//파일 읽기 권한 확인
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
temp += Manifest.permission.READ_EXTERNAL_STORAGE + " ";
}
//파일 쓰기 권한 확인
if (ContextCompat.checkSelfPermission(this,
Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
temp += Manifest.permission.WRITE_EXTERNAL_STORAGE + " ";
}
if (TextUtils.isEmpty(temp) == false) {
// 권한 요청
ActivityCompat.requestPermissions(this, temp.trim().split(" "),1);
}else {
// 모두 허용 상태
Toast.makeText(this, "권한을 모두 허용", Toast.LENGTH_SHORT).show();
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if(requestCode == 101 && resultCode == RESULT_OK){
try{
InputStream is = getContentResolver().openInputStream(data.getData());
Bitmap bm = BitmapFactory.decodeStream(is);
is.close();
iv.setImageBitmap(bm);
}catch (Exception e){
e.printStackTrace();
}
}else if(requestCode == 101 && resultCode == RESULT_CANCELED){
Toast.makeText(this,"취소", Toast.LENGTH_SHORT).show();
}
}
}
해당 예제는 이미지를 터치하면 앨범에 접근할 수 있도록 코드를 만들었습니다.
앨범에 접근하고 이미지를 선택하면 ImageView에 띄워주는 코드만 보실 분은
onActivityResult와 ImageView의 onClick부분만 보시면 됩니다.
코드가 길지 않으니 직접 코딩해보시면서 하시면서 이해해보시면 더 좋을 것 같습니다.
반응형
'안드로이드 > 코드' 카테고리의 다른 글
[안드로이드] 커스텀 토스트(Toast), 스낵바(Snackbar) 사용하기 (0) | 2020.01.05 |
---|---|
[안드로이드] 앱 내부에서 언어 설정 변경하기 (feat.Spinner) (1) | 2020.01.04 |
[안드로이드] Volley, Json을 이용해서 로또 당첨번호 조회하기 (0) | 2020.01.02 |
[안드로이드] 위험 권한 요청, 확인 하기 (0) | 2019.12.27 |
[안드로이드] 페이지 슬라이딩 애니메이션 사용하기 - AnimationListener, Animation, Animation (0) | 2019.12.26 |