Android에서 공유 기능 만들기

지프치프·2022년 5월 6일
2

Android

목록 보기
49/89
post-thumbnail

“Android 로봇은 Google에서 제작하여 공유한 저작물을 복제하거나 수정한 것으로 Creative Commons 3.0 저작자 표시 라이선스의 약관에 따라 사용되었습니다.”


개요

안드로이드에는 공유하기라는 좋은 기능이 있다.
간단한 텍스트나 이미지 등을 다른 앱으로 보낼 수 있는데
이를 사용하는 방법에 대해서 알아보도록 한다.

공유 보내기

다른 앱으로 공유를 통해서 보낼 땐 ShareSheet를 통해 보내게 된다.
아래의 사진이 공유를 보내기 위해 호출된 ShareSheet다.

이걸 본 적이 없다면 안드로이드를 한번도 쓴 적이 없다고 생각한다

ShareSheet를 Intent.ACTION_SEND
intent.createChooser()를 통해 사용할 수 있다.

매우 간단하니 아래의 코드로 바로 살펴보겠다.

val intent = Intent(Intent.ACTION_SEND).apply {
	type = "text/plain"
    putExtra(Intent.EXTRA_TEXT, data)
}
startActivity(Intent.createChooser(intent, data)

type에는 보낼 데이터의 유형
putExtra에는 Intent 플래그와 보낼 데이터를 담는다.

그리고 startActivity에서 intent.createChooser를 호출하면 된다.

공유 받기

공유를 받기 위해선 AnrdroidManifest
인텐트 필터를 등록해야한다.

        <activity android:name=".view.MainActivity">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <!-- 공유 받기 위한 인텐트 필터 -->
            <intent-filter>
                <action android:name="android.intent.action.SEND" />
                <category android:name="android.intent.category.DEFAULT" />
                <data android:mimeType="text/*" />
            </intent-filter>
        </activity>

위 코드처럼 설정해주면 끝이다.

        when(intent.action) {
            Intent.ACTION_SEND -> {
                if(intent.type == "text/plain") {
                    binding.edtInputLink.setText(intent.getStringExtra(Intent.EXTRA_TEXT))
                }
            }
        }

onCreate()에서 intent.action을 통해
Intent.ACTION_SENDintent.type을 이용해
공유받은 데이터를 처리할 수 있다.

MIME 타입

공유를 할 때는 주고 받는 데이터의 타입을 정의해줘야하는데
이 타입을 MIME타입이라고 한다.
공식 문서에 나와있는 유형은 아래와 같다.

Text(text/*)

  • text/plain / text/rtf / text/html / text/json
    manifest에는 text/*로 등록

Image(image/*)

  • image/jpg / image/png / image/gif
    manifest에는 image/*로 등록

Video(video/*)

  • video/mp4) / video/3gp
    manifest에는 video/*로 등록

*/*의 유형도 사용 가능하지만 권장하지 않는다고 한다.



개인적으로 공부했던 것을 바탕으로 작성하다보니
잘못된 정보가 있을수도 있습니다.
인지하게 되면 추후 수정하겠습니다.
피드백은 언제나 환영합니다.
읽어주셔서 감사합니다.

profile
지프처럼 거침없는 개발을 하고싶은 개발자

0개의 댓글