[Android] 다른 앱에서 데이터 받기
이번 프로젝트에서
YouTube 영상에서 앱으로 공유하여 url 과 기타정보를 가져와서 데이터를 화면에 뿌리는 작업을 수행하게되었는데
다른 앱에서 내 앱으로 공유하여 데이터를 받아오는 것은 처음이었기 때문에 삽질을 많이했다.
배껴온 자바코드가 코틀린으로 변환이 안되서 일일히 수정해보다가 접기도 하고...
공식문서와 블로그 글을 참고해서 코드를 작성해보았다.
우선 Manifest는 다음과 같다.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.kenshi.sharedataexample">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.ShareDataExample">
<activity
android:name=".TempActivity"
android:exported="true" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain"/>
</intent-filter>
</activity>
</application>
</manifest>
내 앱으로 공유하였을 때 진입화면에는
<intent-filter>
<action android:name="android.intent.action.SEND" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="text/plain"/>
</intent-filter>
해당 인텐트 필터를 선언해주어야 하고,
당연히 시작 화면이 필요하니 시작화면에는 Launcher를 달아줘야한다.
MainActivity.kt 코드는 다음과 같다.
class MainActivity : AppCompatActivity() {
lateinit var binding: ActivityMainBinding
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val intent = intent
val action = intent.action
val type = intent.type
if(Intent.ACTION_SEND == action && type != null) {
if("text/plain" == type) {
val sharedText = intent.getStringExtra(Intent.EXTRA_TEXT)
Log.d("sharedText", "$sharedText")
binding.tvSharedText.text = sharedText
}
else if (type.startsWith("image/")) {
val imageUri = intent.getParcelableExtra<Uri>(Intent.EXTRA_STREAM)
Log.d("imageUri", "$imageUri")
}
}
}
}
최대한 간단하게 데이터를 text의 형태로 받아와서 해당 텍스트를 textView의 text로 넣어보았다.
유튜브 화면
공유 (ShareDataExample)
결과
이제 해당 url (동영상의 key 값) 을 이용해 YouTube Data API 를 사용하여 retrofit을 통해 썸네일과 Title(노래제목) 등을 response로 받아보도록 하겠다.
어렵다 생각하지 말고 과정을 잘게 나누고 하나씩 해결하자 Divide & Conquer
참고
데이터 다른 앱에 전달
https://developer.android.com/training/sharing/send?hl=ko
데이터 다른 앱에서 받아오기
https://developer.android.com/training/sharing/receive?hl=ko
Author And Source
이 문제에 관하여([Android] 다른 앱에서 데이터 받기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@mraz3068/Android-다른-앱에서-데이터-받기저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)