ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Android] 공유하기 기능 만들기!!
    Android📱 2023. 8. 23. 23:56

    이번에 개발을 진행하면서 공유하기 기능을 만들어야 하는 요구사항이 있었다.

    내가 필요한 부분은 간단한 링크를 공유하는 정도라서 공식문서를 보고 구현했던 부분을 블로그에 남겨보려고 한다.

     

    Sooo 간단

     

    Text 공유하기

    먼저 안드로이드 기기에서 데이터를 공유할때 옆에 사진 같은 모달창을 쉽게 확인해 볼 수 있다.

    유저가 가지고 있는 앱으로 데이터를 전송하거나 복사를 할 수 있게 도와주는 UI이다.

     

    이런 기능을 사용하려면 Intent에 action을 ACTION_SEND로 설정하고,

    전달할 데이터를 번들어 넣고, 데이터의 타입을 지정해 주면 된다.

     

    val sendIntent: Intent = Intent().apply {
        action = Intent.ACTION_SEND
        putExtra(Intent.EXTRA_TEXT, "This is my text to send.")
        type = "text/plain"
    }
    
    val shareIntent = Intent.createChooser(sendIntent, null)
    startActivity(shareIntent)

    우선 간단한 텍스트를 보내려면 위와 같이 설정해 주면된다.

     

     

     

     

    TextField에 입력한 텍스트를 공유해 보는 간단한 예제이다.

    위 사진처럼 입력한 amuru88이 메일로 공유된 것을 확인할 수 있다.

    아 그리고 복사 시에 복사완료 토스트도 Share Sheet에서 띄워줘서 편리하게 이용가능하다.

     

    사진, 영상, pdf 공유

    val shareIntent: Intent = Intent().apply {
        action = Intent.ACTION_SEND
        // Example: content://com.google.android.apps.photos.contentprovider/...
        putExtra(Intent.EXTRA_STREAM, uriToImage)
        type = "image/jpeg"
    }
    startActivity(Intent.createChooser(shareIntent, null))

    위 코드를 사용하고, 

    MiME type을 지정해 주면 사진 영상 등도 공유가 가능하다

     

     

    리스트 공유

     

    val imageUris: ArrayList<Uri> = arrayListOf(
            // Add your image URIs here
            imageUri1,
            imageUri2
    )
    
    val shareIntent = Intent().apply {
        action = Intent.ACTION_SEND_MULTIPLE
        putParcelableArrayListExtra(Intent.EXTRA_STREAM, imageUris)
        type = "image/*"
    }
    startActivity(Intent.createChooser(shareIntent, null))

    해당 코드를 사용하면 list도 전달할 수 있다

     

    미리 보기 추가하기

     val share = Intent.createChooser(Intent().apply {
          action = Intent.ACTION_SEND
          putExtra(Intent.EXTRA_TEXT, "https://developer.android.com/training/sharing/")
    
          // (Optional) Here you're setting the title of the content
          putExtra(Intent.EXTRA_TITLE, "Introducing content previews")
    
          // (Optional) Here you're passing a content URI to an image to be displayed
          data = contentUri
          flags = Intent.FLAG_GRANT_READ_URI_PERMISSION
      }, null)
      startActivity(share)

    위 코드와 함께 FileProvider를 사용해서 미리 보기에 사용하고 싶은 이미지 파일의 Uri를 contentUri 자리에 넘겨주면 미리보기에 사용할 수 있다.

     

    그 외에도 바텀시트에 들어갈 앱을 직접 정하거나(2개까지) 제외시킬 수도 있다

     

    또 BroadcastReceiver와 함께 사용해서 어떤 앱을 선택했는지 콜백을 받을 수도 있다.

    하지만 앱으로 이동하고, 동작을 완료하고 돌아왔는지 그냥 뒤로 가기로 나왔는지까지는 알 수 있는 방법을 찾지 못했다.

    (혹시 아시는 분이 이 글을 보신다면 알려주시면 감사하겠습니다!)

     

    사실 공식 문서에 잘 나와있는 내용이라서 공식문서를 참고해 보셔도 쉽게 따라 할 수 있습니다!

     

     

     

    참고 자료

    https://developer.android.com/training/sharing/send

Designed by Tistory.