개발새발 - IT 기술블로그
article thumbnail

안녕하세요. 이번 글에선 공유하기 버튼을 클릭하면 해당 URL 혹은 데이터를 공유하는 기능에 대해 알아보겠습니다.

 

예제는 아래 개요의 순서대로 진행되며, 코드는 코틀린으로 작성되었습니다.

 

 


결과👀

 

 

개요

 

진행 순서는 아래와 같습니다.

 

1. 공유하기 버튼 생성

2. 인텐트 타입 및 타이틀 지정

3. 공유 할 데이터 지정 

4. chooser로 사용자가 공유할 환경 선택 구현

 

 

공유하기 버튼 생성

 

저는 기본 버튼을 생성하여 공유하기 기능을 넣겠습니다. 용도에 맞게 아이콘이나 텍스트를 넣어서 사용하시면 되겠습니다.

 

<activity_main.xml>

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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"
    tools:context=".MainActivity">

    <Button
        android:id="@+id/shareBtn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="공유하기"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

</androidx.constraintlayout.widget.ConstraintLayout>

 

 

인텐트 타입 및 타이틀 지정

 

버튼을 바인딩하고 클릭 이벤트에 공유하기를 진행 할 Intent를 생성해줍니다.

 

ACTION_SEND_MULTIPLE 플래그로 공유 기능을 가진 인텐트를 생성하였고, 인텐트의 type을 "text/plain"으로 설정하여 텍스트 형식으로 보냈습니다.

 

ACTION_SEND는 한 명에게만 공유할 수 있고 ACTION_SEND_MULTIPLE은 여러명에게 공유할 수 있습니다.

val shareBtn: Button = findViewById(R.id.shareBtn)
shareBtn.setOnClickListener {
    val intent = Intent(Intent.ACTION_SEND_MULTIPLE)
    intent.type = "text/plain"
    
    ...
    
}

 

text/plain 이외에 다른 형식의 데이터를 전송하고 싶으시다면 아래의 표와 같이 변경하시면 됩니다.

이미지 "image/jpeg", "image/png", "image/gif" 등
오디오 "audio/mpeg", "audio/ogg" 등
비디오 "video/mp4", "video/3gpp" 등
웹 링크 "text/plain", "text/html"
PDF 문서 "application/pdf"

 

 

공유할 데이터 지정

intent.putExtra(Intent.EXTRA_TEXT, String)으로 인텐트에 데이터를 넣어주세요

(Intent.EXTRA_TEXT는 Type이 text/plain인 경우에 사용합니다) 

val blogUrl = "https://tekken5953.tistory.com/"
val content = "친구가 링크를 공유했어요!\n어떤 링크인지 들어가서 확인해볼까요?"
intent.putExtra(Intent.EXTRA_TEXT,"$content\n\n$blogUrl")

 

 

Chooser로 사용자가 공유할 환경 선택 구현

chooser는 사용자가 해당 링크를 열 수 있는(공유할 수 있는) 어플리케이션을 모두 보여주는 동시에 최근에 사용했던 공유 가능한 환경도 제시하는 기능입니다.

 

앞서 생성한 intent와 chooserTitle을 파라미터로 createChooser 메서드를 호출합니다.

val chooserTitle = "친구에게 공유하기"
startActivity(Intent.createChooser(intent, chooserTitle))

 

 

 

빌드한 후 공유 버튼을 클릭하시면 아래와 같이 chooser가 나타납니다.

 

 

만약 chooser를 사용하지 않고 startActivity를 했을 경우엔 아래와 같이 나옵니다.

 

 

전체 코드

더보기
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import android.widget.Button

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        val shareBtn: Button = findViewById(R.id.shareBtn)

        shareBtn.setOnClickListener {
            val intent = Intent(Intent.ACTION_SEND_MULTIPLE)
            intent.type = "text/plain"

            val blogUrl = "https://tekken5953.tistory.com/"
            val content = "친구가 링크를 공유했어요!\n어떤 링크인지 들어가서 확인해볼까요?"
            intent.putExtra(Intent.EXTRA_TEXT,"$content\n\n$blogUrl")

            val chooserTitle = "친구에게 공유하기"
            startActivity(Intent.createChooser(intent, chooserTitle))
        }
    }
}

 

결론

 

이렇게 사용자에게 공유하는 기능에 대해 알아보았는데요.

적절한 환경에 잘 사용하시면 좋은 기능이 될 것 같습니다. 

 

 

감사합니다.

 

 

 

소스 코드

https://github.com/tekken5953/ShareExam

 

GitHub - tekken5953/ShareExam

Contribute to tekken5953/ShareExam development by creating an account on GitHub.

github.com