Aplikacja może nie tylko wysyłać dane do innych aplikacji, ale też otrzymywać dane z nich. Zastanów się, jak użytkownicy korzystają z Twojej aplikacji i jakie dane które chcesz otrzymywać z innych aplikacji. Na przykład kanał społecznościowy aplikacja sieciowa może być zainteresowana otrzymywaniem treści tekstowych, takich jak interesujący adres URL z innej aplikacji.
Użytkownicy innych aplikacji często wysyłają dane do Twojej aplikacji za pomocą Androida Arkusz udostępniania lub resolver intencji. Aplikacje, które wysyłają dane do aplikacji, muszą mieć skonfigurowany Typ MIME tych danych. Twoja aplikacja może otrzymywać dane wysyłane przez inną aplikację w w następujący sposób:
Activity
z pasującym tagiemintent-filter
w pliku manifestu- Udostępnianie skrótów opublikowanych przez Twoją aplikację.
Cele udostępniania bezpośredniego to precyzyjne linki do konkretnej aktywności w aplikacji. Często reprezentują osobę lub grupę, co widać w arkuszu udostępniania Androida. Na przykład aplikacja do obsługi wiadomości może być celem bezpośredniego udostępniania dla osoby, która: precyzyjnymi linkami do rozmowy z daną osobą. Zobacz Podaj wartości docelowe bezpośredniego udostępniania, aby za instrukcje.
Obsługa typów MIME
Najlepiej, gdy aplikacja może odbierać jak najszerszy zakres typów MIME.
Na przykład aplikacja do obsługi wiadomości przeznaczona do wysyłania tekstu, zdjęć i filmów
najlepiej obsługuje odbieranie text/*
, image/*
i video/*
. Oto kilka
najpopularniejsze typy MIME do wysyłania i odbierania prostych danych na Androidzie.
Odbiorcy rejestrują się w | Wysyłane przez nadawców |
---|---|
text/* |
|
`image/*` |
|
video/* |
|
Obsługiwane rozszerzenia pliku | application/pdf |
Zapoznaj się z oficjalnym rejestrem typów multimediów MIME IANA.
Twórz świetne cele udostępniania
Gdy użytkownik kliknie obiekt udostępniania powiązany z określoną aktywnością, powinni być w stanie potwierdzić i edytować udostępnioną treść przed ich użyciem. To jest szczególnie ważne w przypadku danych tekstowych.
Odbieranie danych za pomocą aktywności
Odbieranie danych z działaniem wymaga aktualizacji pliku manifestu, obsługi i upewnij się, że użytkownik rozpoznaje aplikację.
Zaktualizuj plik manifestu
Filtry intencji informują system, które intencje akceptuje komponent aplikacji.
Przypomina to sposób, w jaki tworzysz intencję za pomocą działania ACTION_SEND
w polu
Wysyłanie prostych danych do innych aplikacji
utworzysz filtry intencji, które będą otrzymywać intencje związane z tym działaniem. Ty
zdefiniować filtr intencji w pliku manifestu za pomocą elementu <intent-filter>
.
Jeśli na przykład aplikacja obsługuje odbieranie treści tekstowych, plik manifestu, który
zawiera co najmniej jeden obraz dowolnego typu, będzie wyglądać tak:
<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>
Gdy inna aplikacja próbuje udostępnić którykolwiek z tych elementów przez utworzenie
i przekazywaniu jej do startActivity()
,
jest wymieniona jako opcja w arkuszu udostępniania Androida lub narzędziu do rozpoznawania intencji. Jeśli użytkownik
wybierze aplikację, rozpocznie się odpowiednia aktywność (.ui.MyActivity
w
poprzedniego przykładu). Od Ciebie zależy, czy poprawisz treść witryny.
w kodzie i interfejsie.
Obsługa przychodzących treści
Aby przetworzyć treści dostarczone przez Intent
, wywołaj
getIntent()
, aby pobrać obiekt Intent
. Po uzyskaniu obiektu
możesz sprawdzić jego zawartość, aby zdecydować, co zrobić dalej. Jeśli to działanie może
został uruchomiony z innych części systemu (np. programu uruchamiającego), użyj tego
brać pod uwagę przy badaniu intencji.
Dokładnie sprawdzaj przychodzące dane. Nigdy nie wiadomo, aplikacja może Cię wysłać. Na przykład może zostać ustawiony nieprawidłowy typ MIME lub może być bardzo duży. Pamiętaj też, aby przetwarzać dane binarne w osobnym wątku, a nie w wątku głównym („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 } }
Java
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 } }
Aby zaktualizować interfejs po otrzymaniu danych, wystarczy wypełnić pole
EditText
lub może być większa
jest to dość skomplikowane jak dodawanie
ciekawego filtra do zdjęcia. Tylko tak jest
co dalej z aplikacją.
Upewnij się, że użytkownicy rozpoznają Twoją aplikację
Reprezentacja aplikacji to: icon i label w Androidzie Arkusz udostępniania i resolver intencji. Oba są zdefiniowane w manifeście. Dostępne opcje ustawić etykiety filtra aktywności lub intencji, aby zapewnić szerszy kontekst.
Od Androida 10 (poziom interfejsu API 29) w arkuszu udostępniania Androida używane są tylko ikony ustawione w
w pliku manifestu w tagu application
. Android ignoruje ikony ustawione na
intent-filter
i activity
.