Strong 감자의 공부

텍스트 외부공유 기능 -Kotlin 본문

활동 기록/졸업작품 with Kotlin

텍스트 외부공유 기능 -Kotlin

ugyeong 2023. 3. 25. 22:25

쓰게 된 계기 : 태그별 음악 외부공유 기능이 필요해서 

 

오늘은 간단히 외부공유기능을 추가했다. 여기서 더 추가할 것이 있지만 후에 업데이트 할 예정입니당~

(후에 더 추가할 기능 : 태그에 따른 음악 공유(+공유된 모습을 이미지? 텍스트? 혼합? 구성을

어떻게 할지 고민 중)  -> 외부 공유는 일단 여기서 멈춥니당 ( 내부음악공유 먼저 구현할려합니다.)

 

일단 오늘은 음악 타이틀 외부공유 코드 작성했습니다.

스타또~


▪️ 수정한 파일과 설명

  • activity_play_music.xml : 공유 아이콘 넣는xml
  • PlayMusicActivity.kt : 공유동작구현 kt
  • share.xml : 공유 아이콘 vector

▪️ activity_play_music.xml 

공유 버튼 만들기

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:gravity="center"
    tools:context=".PlayMusicActivity">
    
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="70dp"
        android:layout_gravity="top|center"
        android:orientation="horizontal">

        <ImageButton
            android:id="@+id/backBtnPA"
            android:layout_width="50dp"
            android:layout_height="50dp"
            android:layout_gravity="center_vertical"
            android:background="?attr/selectableItemBackground"
            android:padding="10dp"
            android:src="@drawable/ic_baseline_arrow_back_ios_new_24"
            app:tint="@color/black"
            android:contentDescription="Back"/>
            
           // 공유 아이콘 이미지버튼 코드 
        <androidx.appcompat.widget.AppCompatImageButton
            android:id="@+id/sharebtn"
            android:layout_width="40dp"
            android:layout_height="40dp"
            android:background="@drawable/share" // vector 공유이미지
            android:layout_gravity="center"
            android:layout_marginLeft="290dp"
            android:padding="10dp"/>
    </LinearLayout>
 </LinearLayout>

▪️  PlayMusicActivity.kt

import android.app.Dialog
import android.content.Intent
import android.graphics.Color
import android.graphics.drawable.ColorDrawable
import android.os.*
import android.util.Log
import android.view.Gravity
import android.view.ViewGroup
import android.view.Window
import android.view.WindowManager.LayoutParams.*
import android.widget.*
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.AppCompatButton
import androidx.appcompat.widget.AppCompatImageButton
import com.cookandroid.myapplication.databinding.ActivityPlayMusicBinding
import com.google.android.material.bottomsheet.BottomSheetDialog

class PlayMusicActivity : AppCompatActivity() {

    private lateinit var binding:ActivityPlayMusicBinding


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        binding = ActivityPlayMusicBinding.inflate(layoutInflater)
        setContentView(binding.root)
        // 공유하기
        sharebtn()
        }
        
        private fun sharebtn(){
        val title = binding.songNamePA
  
        binding.sharebtn.setOnClickListener{
                val shareIntent = Intent().apply{
                action= Intent.ACTION_SEND
                putExtra(Intent.EXTRA_TITLE,"음악 공유") // 공유시 제목
                // 노래제목과 앱 공유
                putExtra(Intent.EXTRA_TEXT,"노래 제목 : "+ title.getText()+ "\n00에서 들어보세요\n"+"https://play.google.com/store/apps/details?id=패키지명")
                type="text/plain"
            }
//                startActivity(shareIntent) // 결과 : 하단 사진1
            startActivity(Intent.createChooser(shareIntent,null)) // 결과 : 하단 사진2
        }

    }
 }

 

  • 명시 암시 intent

이번에 암시 인텐트를 사용하였는데 이에 대해 간단히 잘 설명해주셨다. ->https://korean-otter.tistory.com/76

• 명시적 인텐트는 정확한 대상에게 요청한다.
• 암시적 인텐트는 작업을 할 수 있는 대상 모두에게 요청한다. (링크 클릭시, 링크를 열 수 있는 앱이 많은 경우. 크롬, 웨일, 인스타 등에게 요청)
ex. 갤러리에서 사진을 골라 공유를 한다면 카톡, 문자, 이메일 등에서 선택하는 것처럼 대상이 여럿 있을 수 있는 것들.

 

사진1

그냥 startActivity(shareIntent)하면 사진1처럼 아무앱이나 나옵니다. 이에 대해 상세히 설정하는 글도 있더군요

근데 사진2처럼 나오는게 목표라 하단 코드 사용했습니다.

startActivity(Intent.createChooser(shareIntent,null))

사진2

▪️  share.xml 

drawable->(마우스 오른쪽) new ->vector asset -> 원하는 이미지 선택-> 자동 완성됨당

저는 이걸로 했슴당(무난)

 

 

 

 

참고한 사이트 : https://developer.android.com/training/sharing/send?hl=ko