티스토리 뷰
안드로이드/코틀린
[Android Studio] 비트맵 사진을 갤러리에 저장하기 코틀린 Bitmap To Gallery Kotlin
eqrw105 2021. 4. 14. 21:51[Android Studio] 비트맵 사진을 갤러리에 저장하기 코틀린 Bitmap To Gallery Kotlin
1. AndroidManifest.xml에 퍼미션 추가
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
2. AndroidManifest.xml -> application에 저장소 접근 허용 추가
<application
android:allowBackup="true"
android:requestLegacyExternalStorage="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
</application>
android:requestLegacyExternalStorage="true"
3. MainActivity -> 이미지 저장 이벤트 함수 정의
private fun saveImageToGallery(){
button.setOnClickListener {
//권한 체크
if(!checkPermission(this, Manifest.permission.READ_EXTERNAL_STORAGE) ||
!checkPermission(this, Manifest.permission.WRITE_EXTERNAL_STORAGE)) {
return@setOnClickListener
}
//그림 저장
if(!imageExternalSave(context, bitmap, context.getString(R.string.app_name))){
Toast.makeText(context, "그림 저장을 실패하였습니다", Toast.LENGTH_SHORT).show()
return@setOnClickListener
}
Toast.makeText(activity, "그림이 갤러리에 저장되었습니다", Toast.LENGTH_SHORT).show()
}
}
4. 저장소 접근 함수 정의
fun imageExternalSave(context: Context, bitmap: Bitmap, path: String): Boolean {
val state = Environment.getExternalStorageState()
if (Environment.MEDIA_MOUNTED == state) {
val rootPath =
Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES)
.toString()
val dirName = "/" + path
val fileName = System.currentTimeMillis().toString() + ".png"
val savePath = File(rootPath + dirName)
savePath.mkdirs()
val file = File(savePath, fileName)
if (file.exists()) file.delete()
try {
val out = FileOutputStream(file)
bitmap.compress(Bitmap.CompressFormat.PNG, 100, out)
out.flush()
out.close()
//갤러리 갱신
context.sendBroadcast(
Intent(
Intent.ACTION_MEDIA_SCANNER_SCAN_FILE,
Uri.parse("file://" + Environment.getExternalStorageDirectory())
)
)
return true
} catch (e: Exception) {
e.printStackTrace()
}
}
return false
}
fun checkPermission(activity: Activty, permission: String): Boolean {
val permissionChecker =
ContextCompat.checkSelfPermission(activity.applicationContext, permission)
//권한이 없으면 권한 요청
if (permissionChecker == PackageManager.PERMISSION_GRANTED) return true
ActivityCompat.requestPermissions(activity, arrayOf(permission), mStorageExternalPermissionRequestCode)
return false
}
'안드로이드 > 코틀린' 카테고리의 다른 글
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 깃랩 잔디 옮기기
- gitlab mirror
- kotlin
- 깃랩에서 깃허브로
- rn 오픈소스 라이센스
- 깃허브 잔디 옮기기
- 안드로이드 스튜디오
- next.js useEffect
- next useEffect
- amplify next.js
- react native oss
- 코틀린
- 카카오 해시키
- kakao api notworking
- non-zero exit code detected
- next.js ssr deploy
- room error
- 안드로이드 스튜디오 해시키
- github mirror
- 안드로이드 해시키
- rn oss
- nextjs ssr deploy
- Build failed because of webpack errors
- 라이브러리 라이센스
- react.js useEffect
- 커밋 이메일 변경
- 깃허브에서 깃랩으로
- amplify build error
- react native 오픈소스 라이선스
- Android Studio
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 |
글 보관함