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 |