Android - 로컬에 있는 이미지를 SNS로 공유하기 (Kotlin)
업데이트:
- 연구주제 : Android - 로컬에 있는 이미지를 SNS로 공유하기 (Kotlin)
- 연구목적 : 안드로이드에서의 코틀린 활용
- 연구일시 : 2020년 03월 25일 09:00~17:00
- 연구자 : 이재환 ljh951103@naver.com
- 연구장비 : HP EliteDesk 800 G4 TWR, Kotlin, Android studio, IntelliJ
- 관련연구 : Java, Android, Kotlin, RecyclerView, Share
서론
사진 관리 프로그램이나 기타 앱들을 개발할 경우, 이미지를 SNS나 문자, 웹 서버 등으로 공유하고싶은 경우가 있다.
이번 포스팅에선 공유하는 기능을 다루어 보겠다.
본론
맨 처음, SNS에 공유를 할 경우 다음과 같이 매니페스트 파일에 권한을 허용해준다.
<uses-permission android:name="android.permission.INTERNET"/>
우선 공유버튼을 하나 만들어준다. 공유버튼은 이미 만들어졌다는 가정하에 진행하겠다.
안드로이드에는 좋은 공유하기위한 환경이 있다.
다음을 입력하면 공유하기위한 옵션을 제공한다.
val intent = Intent(android.content.Intent.ACTION_SEND)
그리고 공유 옵션중 선택을 할 경우 그 선택한 앱을 실행하는 인텐트로 다음과 같이 사용할 수 있다.
val chooser = Intent.createChooser(intent, "친구에게 공유하기")
startActivity(chooser)
URI 이미지 전송
만약 이미지의 소스가 URI의 형태라면 바로 intent uri 값을 넘겨주면 된다.
val intent = Intent(android.content.Intent.ACTION_SEND)
intent.setType("image/*")
intent.putExtra(Intent.EXTRA_STREAM, uri)
val chooser = Intent.createChooser(intent, "친구에게 공유하기")
startActivity(chooser)
로컬 이미지 전송
로컬 이미지를 전송하고 싶을 떄에는 uri 값을 bitmap 형식으로 바꾸어 주어야한다.
private fun getImageUri(context: Context, inImage: Bitmap): Uri? {
val bytes = ByteArrayOutputStream()
inImage.compress(Bitmap.CompressFormat.JPEG, 100, bytes)
val path: String = MediaStore.Images.Media.insertImage(
context.getContentResolver(),
inImage,
"Title",
null
)
return Uri.parse(path)
}
그리고 본인의 비트맵 파일을 가져와서 좀 전에 만든 getImageUri
을 씌워서 uri로 만든다음, 똑같이 값을 전송한다.
val intent = Intent(android.content.Intent.ACTION_SEND)
var bitmap = BitmapFactory.decodeFile(photoList[index].file_path +'/'+ photoList[index].name)
bitmap = MediaStore_Dao.modifyOrientaionById(this, photoList[index].photo_id, bitmap)
val uri: Uri? = getImageUri(this, bitmap)
intent.setType("image/*")
intent.putExtra(Intent.EXTRA_STREAM, uri)
val chooser = Intent.createChooser(intent, "친구에게 공유하기")
startActivity(chooser)
결론
다음의 사진을 하단의 공유 버튼을 통해 공유하고자 한다.
공유 버튼을 누르면 공유할 앱을 선택할 수 있다.
앱을 선택하여 이미지가 잘 공유되었음을 확인할 수 있다.
향후과제
참고자료
https://developside.tistory.com/33
Writer: Jae-Hwan Lee
댓글남기기