728x90
안녕하세요 이번 글에서는 이미지 url을 가지고 이미지를 다운로드하는 기능을 만들어보겠습니다.
환경: android sdk 28 / viewbinding 사용
먼저 manifest에서 권한설정을 해주겠습니다
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
다음으로 간단한 레이아웃을 만들어보겠습니다.
activity_image.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:gravity="center"
android:orientation="vertical">
<EditText
android:id="@+id/edt"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:inputType="textUri" />
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="download image" />
</LinearLayout>
url을 입력할 수 있는 edit text와 다운로드하는 버튼이 있는 화면입니다.
마지막으로 다운로드 동작을 하는 액티비티를 만들어줍니다.
ImageActivity.kt
class ImageActivity : AppCompatActivity() {
lateinit var binding: ActivityImageBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityLoginBinding.inflate(layoutInflater)
setContentView(binding.root)
with(binding) {
btn.setOnClickListener { downloadImage(edt.text.toString()) }
}
}
@SuppressLint("SimpleDateFormat")
private fun downloadImage(url: String) {
if (checkPermission()) {
val fileName =
"/${getString(R.string.app_name)}/${SimpleDateFormat("yyyyMMddHHmmss").format(Date())}.jpg" // 이미지 파일 명
val req = DownloadManager.Request(Uri.parse(url))
req.setTitle(fileName) // 제목
.setNotificationVisibility(DownloadManager.Request.VISIBILITY_VISIBLE_NOTIFY_COMPLETED) // 알림 설정
.setMimeType("image/*")
.setDestinationInExternalPublicDir(
Environment.DIRECTORY_PICTURES,
fileName
) // 다운로드 완료 시 보여지는 이름
val manager = getSystemService(Context.DOWNLOAD_SERVICE) as DownloadManager
manager.enqueue(req)
} else requestPermission()
}
fun checkPermission() =
(ContextCompat.checkSelfPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED)
&&
(ContextCompat.checkSelfPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)
== PackageManager.PERMISSION_GRANTED)
fun requestPermission() {
ActivityCompat.requestPermissions(
this,
arrayOf(
Manifest.permission.READ_EXTERNAL_STORAGE,
Manifest.permission.WRITE_EXTERNAL_STORAGE
),
0
)
}
}
downloadImage()에서는 읽기/쓰기 권한이 있는지 우선 체크한 뒤, 없다면 권한 요청을, 있다면 해당 url의 이미지를 DownloadManager를 이용해 다운로드합니다.
'안드로이드 코틀린' 카테고리의 다른 글
[Kotlin][Android] 더보기가 있는 텍스트뷰 만들기 (0) | 2022.02.03 |
---|---|
[Kotlin][Android] 이미지 회전 (0) | 2022.01.30 |
[Kotlin][Android] Activity 이동 애니메이션 (0) | 2022.01.18 |
[Kotlin][Android] FCM 메시지 받기 (0) | 2022.01.11 |
[Kotlin][Android] 이미지 url로 이미지 로딩하기 (0) | 2022.01.10 |