본문 바로가기
안드로이드/센서

안드로이드 앨범에서 사진 가져오기

by 김어찐 2022. 6. 25.
728x90

카메라를 사용하는 것처럼 앨범에서 사진을 가져올 때도 다른 액티비티를 실행시켜서 사진을 가져올 수 있다.
Intent.ACTION_PICK

 

package com.example.getalbum

import android.Manifest
import android.content.Intent
import android.graphics.BitmapFactory
import android.graphics.ImageDecoder
import android.os.Build
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.provider.MediaStore
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {

    val permision_list = arrayOf(
        Manifest.permission.READ_EXTERNAL_STORAGE,
        Manifest.permission.ACCESS_MEDIA_LOCATION,
    )
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        requestPermissions(permision_list,0)

        button.setOnClickListener {
            // 앨범에서 사진을 선택할 수 있는 액티비티를 실행한다
            val albumIntent = Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
            // 실행할 액티비티의 타입을 설정(이미지를 선택할 수 있는 것)
            albumIntent.type = "image/*"
            // 선택할 파일의 타입을 지정(안드로이드 OS가 사전작업을 할 수있도록)
            val mimeType = arrayOf("image/*")
            albumIntent.putExtra(Intent.EXTRA_MIME_TYPES,mimeType)
            startActivityForResult(albumIntent,0)
        }
    }




    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        if(resultCode == RESULT_OK){
            // 선택한 이미지의 경로 데이터를 관리하는 Uri 객체를 추출한다.
            val uri  = data?.data

            if(uri != null){
                if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q){
                    // 안드로이드 10 버전 부터
                    val source = ImageDecoder.createSource(contentResolver,uri)
                    val bitmap = ImageDecoder.decodeBitmap(source)
                    imageView.setImageBitmap(bitmap)
                } else{
                    // 안드로이드 9버전 까지
                    val cursor = contentResolver.query(uri,null,null,null,null)
                    if(cursor!=null){
                        cursor.moveToNext()
                        // 이미지 경로를 가져온다
                        val index = cursor.getColumnIndex(MediaStore.Images.Media.DATA)
                        val source = cursor.getString(index)
                        // 이미지를 생성한다.
                        val bitmap = BitmapFactory.decodeFile(source)
                        imageView.setImageBitmap(bitmap)
                    }
                }
            }
        }
    }
}

 

 

퍼미션 추가

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    package="com.example.getalbum">

    <application
        android:allowBackup="true"
        android:dataExtractionRules="@xml/data_extraction_rules"
        android:fullBackupContent="@xml/backup_rules"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/Theme.GetAlbum"
        tools:targetApi="31">
        <activity
            android:name=".MainActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    <uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
</manifest>
728x90

'안드로이드 > 센서' 카테고리의 다른 글

안드로이드 사진 보정  (0) 2022.06.25
안드로이드 사진 기능  (0) 2022.06.25
안드로이드 GPS  (0) 2022.06.25
안드로이드 센서  (0) 2022.06.24
안드로이드 단말기 정보 파악  (0) 2022.06.24