Może to być zabawny obraz, informacyjny film lub wciągający klip audio. że umożliwienie użytkownikom udostępniania treści wzbogaca ich wrażenia i promuje zaangażowanie użytkowników. W tym dokumencie omawiamy najważniejsze kwestie związane z udostępnianiem multimediów na Androidzie, w tym interfejsy API i techniki, których potrzebujesz do integracji tej funkcji.
Stworzone z myślą o udostępnianiu
Android zachęca do współdziałania aplikacji z systemem opartym na Intencje. Intencja to abstrakcyjny opis operacji do wykonania. Intencje umożliwiają aplikacjom komunikację ze sobą bez konieczności swoje szczególne cechy.
Gdy aplikacja chce udostępnić dane lub zainicjować działanie, tworzy intencję, określa rodzaj treści i operacji. System Android wyświetla listę odpowiednich aplikacji, które mogą obsłużyć ten zamiar, umożliwiając użytkownikowi wybranie aplikacji, której ma użyć. Takie podejście sprzyja współpracy w ekosystemie.
Udostępnianie tekstu wymaga tylko kilku linii kodu:
val sendIntent: Intent = Intent().apply {
action = Intent.ACTION_SEND
putExtra(Intent.EXTRA_TEXT, "This is my text to share.")
type = "text/plain"
}
val shareIntent = Intent.createChooser(sendIntent, null)
startActivity(shareIntent)
Linia createChooser wyświetla interfejs Androida – panel udostępniania, który umożliwia użytkownikom udostępnianie informacji innym osobom, w tym odpowiednich sugestii aplikacji, za pomocą jednego kliknięcia. Inne możliwości, które masz w panelu udostępniania na Androidzie:
- Dowiedz się, kiedy i gdzie użytkownicy udostępnią coś
- Wyświetlanie podglądu sformatowanego tekstu już od Androida 10 (poziom API 29)
Więcej informacji o Androidzie znajdziesz w sekcji Wysyłanie prostych danych do innych aplikacji. Arkusze udostępniania i informacje o tym, jak z nich korzystać
Podaj cele udostępniania bezpośredniego, aby ułatwić i przyspieszyć udostępnianie adresów URL, obrazów i innych rodzajów danych z innych aplikacji przez użytkowników w Twojej aplikacji. Funkcja udostępniania bezpośredniego wyświetla kontakty z aplikacji do przesyłania wiadomości i społecznościowych bezpośrednio na karcie udostępniania w Androidzie, bez konieczności wybierania aplikacji i wyszukiwania kontaktu.
Umożliwiają otrzymywanie szczegółowych treści
OnReceiveContentListener. Ten interfejs API zapewnia jedno miejsce, w którym Twój kod może obsługiwać wszystkie treści, od zwykłego i sformatowanego tekstu po znaczniki, obrazy, filmy, pliki audio i inne. Treści mogą pochodzić z klawiatury obrazkowej, schowka lub z przeciągania i upuszczania.
Udostępnianie plików multimedialnych
Intencje mogą zawierać tylko niewielką ilość danych, dlatego Android umożliwia tworzenie bezpiecznych uchwytów do plików. Bezpieczne udostępnianie plików multimedialnych z: aplikacja obejmuje:
- Skonfiguruj aplikację tak, aby oferowała bezpieczny uchwyt pliku (w postaci identyfikatora URI treści) za pomocą komponentu
FileProviderna Androida. - Określ katalogi, które można udostępniać, w pliku manifestu.
- Użyj
getUriForFile, aby utworzyć adres URL treści, który będzie bezpieczny z uchwytem. - Utwórz intencję, która przyzna uprawnienia do pliku.
Więcej informacji o bezpiecznym udostępnianiu plików znajdziesz w artykule Udostępnianie plików.
Optymalizacja multimediów pod kątem udostępniania
Niezależnie od tego, czy udostępniasz treści multimedialne innym użytkownikom w aplikacji, czy innej aplikacji, musisz mieć pewność, że udostępniane treści multimedialne są wysokiej jakości.
Utrzymywanie równowagi między jakością a rozmiarem
Duże pliki multimedialne mogą szybko zużywać przepustowość i pamięć, co prowadzi do irytujących opóźnień i ewentualnych dodatkowych opłat za przekroczenie limitu danych. Kompresja jest tutaj Twoim najlepszym przyjacielem.
- Kompresja obrazu: używaj nowoczesnych formatów kompresji obrazu, takich jak WebP i AVIF, które zapewniają lepsze współczynniki kompresji niż tradycyjne pliki JPEG bez znacznej utraty jakości. Eksperymentuj z różnymi ustawieniami jakości, aby znaleźć optymalne rozwiązanie.
- Kompresja wideo: korzystanie z możliwości kompresji wideo AV1 lub H.265 (HEVC), aby zapewnić większą wydajność kompresji przy zachowaniu doskonałej jakości obrazu. Możesz sprawdzić, czy jest używane kodowanie sprzętowe
na urządzeniach z Androidem 10 lub nowszym, a także w
mediaPerformanceClass, aby pomóc określić, jakie funkcje jest najbardziej obsługiwane przez Twoje urządzenie. Zastanów się nad udostępnieniem różnych opcji rozdzielczości, aby zaspokoić różne preferencje użytkowników i warunki sieci.
fun hasHardwareEncodingSupportFor(mimeType: String): Boolean {
val codecList = MediaCodecList(REGULAR_CODECS)
val codecInfos = codecList.codecInfos
for ( codecInfo in codecInfos ) {
if (!codecInfo.isEncoder()) {
continue;
}
if (!codecInfo.isHardwareAccelerated()) {
continue;
}
val types: Array<String> = codecInfo.getSupportedTypes()
for (j in types.indices) {
if (types[j].equals(mimeType, ignoreCase = true)) {
return true
}
}
}
return false
}
// test for AV1 hardware encoding support
val hasAV1 = hasHardwareEncodingSupportFor("video/av01")
Dostosowuję multimedia
Platformy mediów społecznościowych często narzucają określone wymiary i formaty udostępnianych multimediów. Przed udostępnieniem warto zmienić rozmiar i przyciąć pliki multimedialne, aby uniknąć nieoczekiwanych problemów z zniekształceniem lub formatowaniem, gdy użytkownicy publikują treści na swoich ulubionych platformach.
Zapewnij jasne instrukcje i wskazówki ułatwiające użytkownikom optymalizację multimediów przed udostępnieniem. Mogą one obejmować wskazówki dotyczące dostosowywania szybkości transmisji bitów kodowania, ustawienie parametrów kwantyzacji, wybór formatu wideo, wybrać odpowiednie rozmiary plików lub poznać wpływ różnych opcje udostępniania.
Zwiększanie widoczności multimediów
Dodanie odpowiednich metadanych, takich jak tytuły, opisy i tagi, może zwiększyć widoczność plików multimedialnych. Zachęcaj użytkowników do dodawania własnych treści opisy i napisy podczas udostępniania, co pozwala jeszcze bardziej spersonalizować materiał.
Dodawanie metadanych do obrazów
Klasa Jetpack ExifInterface zapisuje metadane w formacie JPEG, PNG i WebP. w postaci tagów Exif.
// sets the title of the image in the form of Exif data
val exif = ExifInterface(imageFile)
exif.setAttribute(ExifInterface.TAG_IMAGE_DESCRIPTION, "Beautiful sunset")
exif.saveAttributes()