앱이 다른 앱에 데이터를 보낼 수 있는 것처럼 확인할 수 있습니다. 사용자가 애플리케이션과 상호작용하는 방식과 수신하려는 유형만 지정할 수 있습니다. 예를 들어 소셜 미디어 텍스트 콘텐츠를 수신하는 데 관심이 있을 수 있는 네트워킹 응용 프로그램은 다른 앱에서 가져온 것입니다.
다른 앱의 사용자가 자주 Android를 통해 내 앱으로 데이터를 전송합니다. Sharesheet 또는 인텐트 리졸버 앱에 데이터를 전송하는 앱은 해당 데이터의 MIME 유형입니다. 여러분의 앱은 다음 방법을 사용하세요.
- 일치하는
intent-filter
태그가 매니페스트에 있는Activity
- 앱에서 공유 바로가기를 게시함.
직접 공유 타겟은 앱 내의 특정 활동으로 연결되는 딥 링크입니다. 스티커는 개인이나 그룹을 나타내는 경우가 많으며 Android Sharesheet에 표시됩니다. 예를 들어 메시지 앱에서 메시지를 보낼 수 있는 사람에게 직접 공유 대상을 해당 사용자와의 대화에 직접 연결되는 딥 링크입니다. 자세한 내용은 자세한 내용은 직접 공유 타겟을 제공하세요. 참조하세요.
MIME 유형 지원
앱이 가능한 가장 광범위한 MIME 유형을 수신할 수 있어야 하는 것이 이상적입니다.
예: 텍스트, 이미지, 동영상을 전송하도록 설계된 메시지 앱
text/*
, image/*
, video/*
수신을 지원하는 것이 이상적입니다. 다음은 Android에서 간단한 데이터를 주고받는 데 사용되는 몇 가지 일반적인 MIME 유형입니다.
수신기는 | 발신자 전송 |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
지원되는 파일 확장자 | application/pdf |
MIME 미디어 유형의 IANA 공식 레지스트리를 참조하세요.
효과적인 공유 타겟 만들기
사용자가 특정 활동과 연결된 공유 타겟을 탭할 때 사용하기 전에 공유 콘텐츠를 확인하고 수정할 수 있어야 합니다. 이것은 특히 텍스트 데이터에 중요합니다
활동으로 데이터 수신
활동이 포함된 데이터를 수신하려면 매니페스트를 업데이트하고 사용자가 앱을 인식하는지 확인해야 합니다.
매니페스트 업데이트하기
인텐트 필터는 앱 구성요소가 허용하는 인텐트를 시스템에 알립니다.
다음에서 ACTION_SEND
작업을 사용하여 인텐트를 구성한 방법과 비슷합니다.
다른 앱으로 간단한 데이터 보내기
단원에서는 이 작업으로 인텐트를 수신하는 인텐트 필터를 만듭니다. 나
<intent-filter>
요소를 사용하여 매니페스트에서 인텐트 필터를 정의합니다.
예를 들어 앱이 텍스트 콘텐츠 수신을 처리하는 경우 모든 유형의 이미지를 하나 이상 포함하는 매니페스트는 다음 스니펫과 같습니다.
<activity android:name=".ui.MyActivity" > <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="text/plain" /> </intent-filter> <intent-filter> <action android:name="android.intent.action.SEND_MULTIPLE" /> <category android:name="android.intent.category.DEFAULT" /> <data android:mimeType="image/*" /> </intent-filter> </activity>
다른 앱이
인텐트를 전달하고 애플리케이션인 startActivity()
에 전달합니다.
Android Sharesheet 또는 인텐트 리졸버에 옵션으로 나열되어 있습니다. 사용자가
앱이 선택되면 상응하는 활동이 시작됩니다 (.ui.MyActivity
참조). 그런 다음 콘텐츠를 적절하게
처리하는 것은 개발자의 몫입니다
사용할 수 있습니다.
수신되는 콘텐츠 처리하기
Intent
에서 전송한 콘텐츠를 처리하려면 다음을 호출합니다.
getIntent()
: Intent
객체를 가져옵니다. 객체를 가져온 후에는
콘텐츠를 검토하여 다음에 할 작업을 결정할 수 있습니다. 이 활동이
시스템의 다른 부분 (예: 런처)에서 시작하는 경우
고려하시기 바랍니다.
수신되는 데이터를 주의해서 확인하세요. 다른 데이터는 모르기 때문에 보낼 수 있습니다. 예를 들어 잘못된 MIME 유형이 설정되었거나 이미지가 아주 클 수도 있습니다 또한 바이너리 데이터를 처리하여 기본('UI') 스레드가 아닌 별도의 스레드에서 이루어집니다.
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { ... when { intent?.action == Intent.ACTION_SEND -> { if ("text/plain" == intent.type) { handleSendText(intent) // Handle text being sent } else if (intent.type?.startsWith("image/") == true) { handleSendImage(intent) // Handle single image being sent } } intent?.action == Intent.ACTION_SEND_MULTIPLE && intent.type?.startsWith("image/") == true -> { handleSendMultipleImages(intent) // Handle multiple images being sent } else -> { // Handle other intents, such as being started from the home screen } } ... } private fun handleSendText(intent: Intent) { intent.getStringExtra(Intent.EXTRA_TEXT)?.let { // Update UI to reflect text being shared } } private fun handleSendImage(intent: Intent) { (intent.getParcelableExtra<Parcelable>(Intent.EXTRA_STREAM) as? Uri)?.let { // Update UI to reflect image being shared } } private fun handleSendMultipleImages(intent: Intent) { intent.getParcelableArrayListExtra<Parcelable>(Intent.EXTRA_STREAM)?.let { // Update UI to reflect multiple images being shared } }
자바
void onCreate (Bundle savedInstanceState) { ... // Get intent, action and MIME type Intent intent = getIntent(); String action = intent.getAction(); String type = intent.getType(); if (Intent.ACTION_SEND.equals(action) && type != null) { if ("text/plain".equals(type)) { handleSendText(intent); // Handle text being sent } else if (type.startsWith("image/")) { handleSendImage(intent); // Handle single image being sent } } else if (Intent.ACTION_SEND_MULTIPLE.equals(action) && type != null) { if (type.startsWith("image/")) { handleSendMultipleImages(intent); // Handle multiple images being sent } } else { // Handle other intents, such as being started from the home screen } ... } void handleSendText(Intent intent) { String sharedText = intent.getStringExtra(Intent.EXTRA_TEXT); if (sharedText != null) { // Update UI to reflect text being shared } } void handleSendImage(Intent intent) { Uri imageUri = (Uri) intent.getParcelableExtra(Intent.EXTRA_STREAM); if (imageUri != null) { // Update UI to reflect image being shared } } void handleSendMultipleImages(Intent intent) { ArrayList<Uri> imageUris = intent.getParcelableArrayListExtra(Intent.EXTRA_STREAM); if (imageUris != null) { // Update UI to reflect multiple images being shared } }
데이터를 수신한 후 UI를 업데이트하는 것은
EditText
또는 그 이상일 수 있습니다.
이 작업은 이미지에 흥미로운 사진 필터를 적용하는 것과 같이 매우 복잡합니다. 원하는 만큼
파악할 수 있습니다.
사용자가 앱을 인식하게 만들기
앱은 다음과 같이 표현됩니다. icon 및 label Sharesheet 및 인텐트 리졸버. 아이콘과 라벨은 둘 다 매니페스트에 정의되어 있습니다. 다음과 같은 작업을 할 수 있습니다. 활동 또는 인텐트 필터 라벨을 설정하여 더 많은 컨텍스트를 제공하세요
Android 10 (API 수준 29)부터 Android Sharesheet는
application
태그에 매니페스트를 추가해야 합니다. Android에서 설정된 아이콘을 무시함
intent-filter
및 activity
태그.