728x90
안녕하세요. 오늘은 이미지의 절대경로를 이용해 Intent로 넘겨보겠습니다.
먼저 manifest파일에 외부 저장소 읽기 권한을 추가합니다.
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
그리고 이미지를 가져오고 넘겨줄 메인액티비티의 xml파일 소스 입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/image_view"/>
<Button
android:layout_marginTop="50dp"
android:layout_gravity="center_horizontal"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="사진 등록"
android:id="@+id/select_image_btn"/>
<Button
android:layout_marginTop="50dp"
android:layout_gravity="center_horizontal"
android:layout_width="300dp"
android:layout_height="wrap_content"
android:text="이미지 전달"
android:id="@+id/intent_image_btn"/>
</LinearLayout>
MainActivity.java클래스의 코드입니다.
public class MainActivity extends AppCompatActivity {
ImageView imageView;
Button select_image_btn;
Button intent_image_btn;
Context context;
String final_uri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imageView = findViewById(R.id.image_view);
select_image_btn = findViewById(R.id.select_image_btn);
intent_image_btn = findViewById(R.id.intent_image_btn);
context = this;
if (ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.READ_EXTERNAL_STORAGE}, 1);
}
select_image_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent();
intent.setAction(Intent.ACTION_PICK);
intent.setType(MediaStore.Images.Media.CONTENT_TYPE);
intent.setType("image/*");
startActivityForResult(intent, 0);
}
});
intent_image_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
if(intent_image_btn != null){
Intent intent = new Intent(context,IntentActivity.class);
intent.putExtra("uri",final_uri);
startActivity(intent);
}else {
Toast.makeText(context,"이미지를 선택해주세요.",Toast.LENGTH_SHORT).show();
}
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 0 && data != null && data.getData() != null){
Uri filePath = data.getData();
final_uri = GetUrI(filePath);
imageView.setImageURI(filePath);
}
}
private String GetUrI(Uri contentURI) {
String result;
Cursor cursor = getContentResolver().query(contentURI, null, null, null, null);
if (cursor == null) {
result = contentURI.getPath();
} else {
cursor.moveToFirst();
int idx = cursor.getColumnIndex(MediaStore.Images.ImageColumns.DATA);
result = cursor.getString(idx);
cursor.close();
}
return result;
}
}
넘겨줄 준비는 마쳤고 이제 다른 액티비에서 넘겨 받은 절대경로로 이미지뷰에 띄워볼게요.
레이아웃 소스입니다.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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=".IntentActivity">
<ImageView
android:layout_width="match_parent"
android:layout_height="300dp"
android:id="@+id/image_view"/>
</LinearLayout>
다음은 해당 레이아웃의 클래스입니다.
public class IntentActivity extends AppCompatActivity {
ImageView imageView;
String uri;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_intent);
imageView = findViewById(R.id.image_view);
Intent intent = getIntent();
uri = intent.getStringExtra("uri");
File imageFile = new File(uri);
Uri imageUri = Uri.fromFile(imageFile);
imageView.setImageURI(imageUri);
}
}
절대경로를 String형식으로 저장해 보관할 수도 있습니다.
결과를 보겠습니다.
'안드로이드 자바' 카테고리의 다른 글
[Android][Java] ConstraintSet클래스를 사용해 Chain Weight 유동적으로 변경하기 (0) | 2023.05.28 |
---|---|
[Android][Java] 원형 다이얼로그 구현하기 (2) | 2023.05.27 |
[Android][JAVA] 반투명 로딩다이얼로그 구현하기 (0) | 2023.05.21 |
[Android][JAVA]액티비티 Zoom In, Out 예제 (0) | 2023.05.20 |
[Android][Java] Recyclerview 다중선택 (0) | 2023.05.19 |