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)

결론

다음의 사진을 하단의 공유 버튼을 통해 공유하고자 한다.

image


공유 버튼을 누르면 공유할 앱을 선택할 수 있다.

image


앱을 선택하여 이미지가 잘 공유되었음을 확인할 수 있다.

image


향후과제


참고자료

https://developside.tistory.com/33


Writer: Jae-Hwan Lee

댓글남기기