Mainfest.xml
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.ACCESS_MEDIA_LOCATION"/>
MainActivity.kt
lateinit var activityMainBinding: ActivityMainBinding
val permissionList = arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.ACCESS_MEDIA_LOCATION
)
lateinit var albumActivityLauncher: ActivityResultLauncher<Intent>
MainActivity.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"
android:orientation="vertical"
tools:context=".MainActivity" >
<Button
android:id="@+id/button"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="앨범에서 가져오기" />
<ImageView
android:id="@+id/imageView"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
tools:srcCompat="@tools:sample/avatars" />
</LinearLayout>
MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
activityMainBinding = ActivityMainBinding.inflate(layoutInflater)
setContentView(activityMainBinding.root)
requestPermissions(permissionList, 0)
val contract1 = ActivityResultContracts.StartActivityForResult()
albumActivityLauncher = registerForActivityResult(contract1){
}
activityMainBinding.run {
button.setOnClickListener {
val newIntent = Intent(Intent.ACTION_PICK,MediaStore.Images.Media.EXTERNAL_CONTENT_URI)
newIntent.setType("image/*")
val mimeType = arrayOf("image/*")
newIntent.putExtra(Intent.EXTRA_MIME_TYPES,mimeType)
albumActivityLauncher.launch(newIntent)
}
}
}
albumActivityLauncher = registerForActivityResult(contract1){
if(it?.resultCode == RESULT_OK){
val uri = it.data?.data
if(uri != null){
if(Build.VERSION.SDK_INT>= Build.VERSION_CODES.Q){
val source = ImageDecoder.createSource(contentResolver,uri)
val bitmap = ImageDecoder.decodeBitmap(source)
activityMainBinding.imageView.setImageBitmap(bitmap)
}
} else {
val cursor = uri?.let { it1 -> contentResolver.query(it1, null, null, null, null) }
if(cursor != null){
cursor.moveToNext()
val idx = cursor.getColumnIndex(MediaStore.Images.Media.DATA)
val source = cursor.getString(idx)
val bitmap = BitmapFactory.decodeFile(source)
activityMainBinding.imageView.setImageBitmap(bitmap)
}
}
}
}
좋은 글 잘 읽었습니다, 감사합니다.