Computer >> 컴퓨터 >  >> 프로그래밍 >> Android

Android에서 내부 저장소의 이미지 파일을 읽는 방법

이 튜토리얼에서는 Android 앱에서 내부 저장소(Internal Storage)에 저장된 이미지 파일을 읽어 화면에 표시하는 방법을 단계별로 살펴봅니다. 버튼을 클릭하면 내부 저장소에서 이미지를 불러와 ImageView에 출력하는 간단한 예제입니다.

1단계 — 새 프로젝트 만들기

Android Studio를 실행하고 File → New Project 메뉴로 이동한 뒤, 필요한 정보를 모두 입력하여 새 프로젝트를 생성합니다.

2단계 — 레이아웃 파일 작성

res/layout/activity_main.xml 파일에 아래 코드를 추가합니다.

<?xml version = "1.0" encoding = "utf-8"?>
<LinearLayout xmlns:android = "https://schemas.android.com/apk/res/android"
    xmlns:tools = "https://schemas.android.com/tools"
    android:layout_width = "match_parent"
    android:layout_height = "match_parent"
    tools:context = ".MainActivity"
    android:orientation = "vertical">
    <Button
        android:id = "@+id/read"
        android:text = "read"
        android:layout_width = "wrap_content"
        android:layout_height = "wrap_content" />
    <ImageView
        android:id = "@+id/imageView"
        android:layout_width = "300dp"
        android:layout_height = "300dp" />
</LinearLayout>

위 레이아웃에는 버튼 하나와 ImageView 하나가 배치되어 있습니다. 사용자가 버튼을 클릭하면 내부 저장소에서 이미지를 가져와 ImageView에 표시하는 구조입니다.

3단계 — MainActivity.java 작성

src/MainActivity.java 파일에 다음 코드를 추가합니다.

package com.example.andy.myapplication;

import android.content.Context;
import android.content.ContextWrapper;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;

import java.io.File;

public class MainActivity extends AppCompatActivity {
    Button read;
    ImageView imageView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        imageView = findViewById(R.id.imageView);
        read = findViewById(R.id.read);
        read.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                ContextWrapper cw = new ContextWrapper(getApplicationContext());
                File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
                File file = new File(directory, "mario" + ".png");
                imageView.setImageDrawable(Drawable.createFromPath(file.toString()));
            }
        });
    }
}

코드 핵심 로직 설명

버튼 클릭 시 동작하는 핵심 코드는 다음과 같습니다.

  • ContextWrapper를 사용해 애플리케이션 컨텍스트를 감싸고, getDir("imageDir", Context.MODE_PRIVATE)로 내부 저장소의 비공개 디렉터리에 접근합니다.
  • 해당 디렉터리 안에서 mario.png라는 이름의 이미지 파일 객체를 생성합니다.
  • Drawable.createFromPath()를 호출해 파일 경로로부터 Drawable을 만들고, 이를 setImageDrawable()로 ImageView에 설정합니다.

앱 실행 및 결과 확인

이제 애플리케이션을 실행해 보겠습니다. 실제 Android 기기를 컴퓨터에 연결했다고 가정합니다. Android Studio에서 프로젝트의 액티비티 파일 중 하나를 열고 툴바의 Run 아이콘을 클릭하세요. 옵션 목록에서 자신의 모바일 기기를 선택하면, 기본 화면이 기기에 표시됩니다.

Android에서 내부 저장소의 이미지 파일을 읽는 방법

위 화면에서 read 버튼을 클릭하면, 내부 저장소에 저장된 이미지가 아래와 같이 화면에 나타납니다.

Android에서 내부 저장소의 이미지 파일을 읽는 방법

이처럼 ContextWrapper.getDir()Drawable.createFromPath()만 활용하면 별도의 권한 요청 없이도 내부 저장소의 이미지를 손쉽게 읽어올 수 있습니다. 내부 저장소는 해당 앱 전용 영역이므로 외부 저장소 접근 권한(READ_EXTERNAL_STORAGE)이 필요하지 않다는 점도 함께 기억해 두면 좋습니다.