Ganz gleich, ob es sich um ein lustiges Bild, ein informatives Video oder einen fesselnden Audioclip handelt: Wenn Nutzer Inhalte teilen können, wird die Nutzung für sie interessanter und die Interaktion wird gefördert. In diesem Dokument geht es um die Grundlagen der Medienfreigabe unter Android, einschließlich der APIs und Techniken, die Sie benötigen, um diese Funktion zu integrieren.
Für die gemeinsame Nutzung entwickelt
Das Android-Design fördert die Interoperabilität zwischen Apps mithilfe eines Systems, das auf Intents basiert. Ein Intent ist eine abstrakte Beschreibung eines auszuführenden Vorgangs. Intents ermöglichen es Apps, miteinander zu kommunizieren, ohne Einzelheiten zueinander aufzeigen.
Wenn eine App Daten teilen oder eine Aktion starten möchte, wird ein Intent erstellt, gibt die Art des Inhalts und des Vorgangs an. Das Android-System zeigt eine Liste Apps, die diesen Intent verarbeiten können, sodass Nutzer selbst entscheiden können, zu verwenden. Dieser Ansatz fördert eine auf Zusammenarbeit ausgelegte Umgebung.
Für das Teilen von Text sind nur wenige Codezeilen erforderlich:
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)
Die Zeile createChooser
zeigt die Benutzeroberfläche von Android Sharesheet, mit der Sie
können Nutzer Informationen mit anderen teilen, z. B. relevante App-Vorschläge.
mit nur einem Fingertipp. Das Android-Sharesheet bietet außerdem folgende Möglichkeiten:
- Herausfinden, wann und wo Nutzer Inhalte teilen
- Vorschau von Rich-Text-Inhalten ab Android 10 (API-Level 29) bereitstellen
Weitere Informationen zu Android finden Sie unter Einfache Daten an andere Apps senden. Sharesheets und deren Verwendung
Stellen Sie Direktfreigabe-Ziele bereit, um dies für Nutzer von anderen Apps, um URLs, Bilder oder andere Daten mit Ihrer App zu teilen. Direkt Teilen funktioniert, indem Kontakte aus Messaging- und Social Apps direkt präsentiert werden auf dem Android-Sharesheet ansehen, ohne dass die Nutzer die App auswählen und suchen Sie nach dem Kontakt.
den Empfang von Rich Content über ein
OnReceiveContentListener
Diese API bietet einen zentralen Ort für Ihre
für den Empfang aller Inhalte, von Nur- und formatiertem Text bis hin zu Markups,
Bilder, Videos, Audiodateien und andere Elemente. Der Inhalt kann von Bildern stammen.
per Drag-and-drop oder in die Zwischenablage verschieben.
Mediendateien teilen
Intents können nur eine kleine Menge an Daten enthalten. Daher bietet Android eine Möglichkeit, dass Intents einen sicheren Alias für Dateien enthalten. Wenn Sie Mediendateien sicher über Ihre App freigeben möchten, müssen Sie Folgendes beachten:
- Konfigurieren Sie Ihre App so, dass ein sicheres Handle für die Datei angeboten wird – in Form eines
Inhalts-URI unter Verwendung der Android-Komponente
FileProvider
. - Geben Sie freigegebene Verzeichnisse in Ihrem Manifest an.
- Verwenden Sie
getUriForFile
, um eine Inhalts-URL zu erstellen, die als sicherer Alias für die Datei dient. - Erstellen Sie einen Intent, der Berechtigungen für die Datei gewährt.
Weitere Informationen zum sicheren Freigeben von Dateien finden Sie hier. -Dateien.
Medien für die Freigabe optimieren
Unabhängig davon, ob Sie Medien mit anderen Nutzern in Ihrer App oder eine andere App verwendet, solltet ihr Medien teilen, die eine hohe Qualität Erfahrung teilen.
Überzeugendes Verhältnis zwischen Qualität und Größe
Große Mediendateien können schnell Bandbreite und Speicherplatz verbrauchen, was zu frustrierende Verzögerungen und möglicherweise Gebühren für Datenüberschreitung für Ihre Nutzer. Komprimierung ist hier der beste Freund.
- Bildkomprimierung: Nutzen Sie moderne Bildkomprimierungsformate wie WebP und AVIF bieten im Vergleich zu herkömmlichen JPEGs ohne nennenswerte Qualitätsverluste. Mit unterschiedlicher Qualität experimentieren Einstellungen anpassen, um den perfekten Punkt zu finden.
- Videokomprimierung: Vorteile von AV1 oder H.265 (HEVC)
für eine bessere Kompressionseffizienz bei gleichzeitiger
hervorragender Bildqualität. Sie können prüfen, ob Hardwarecodierung vorhanden ist.
auf Geräten mit Android 10 oder höher sowie in der
mediaPerformanceClass
um herauszufinden, was Ihr Gerät am besten unterstützt. Biete verschiedene Auflösungsoptionen an, um den unterschiedlichen Nutzerpräferenzen und Netzwerkbedingungen gerecht zu werden.
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")
Medien anpassen
Soziale Medien setzen oft bestimmte Dimensionen und Seitenverhältnisse für geteilten Medien. Durch proaktive Größenanpassung und Zuschneiden von Mediendateien beim Teilen können Sie unerwartete Verzerrungen oder Formatierungsprobleme vermeiden, die Nutzer auf ihren Lieblingsplattformen posten.
Geben Sie eine klare Anleitung und Informationen dazu, wie Nutzer ihre Medien vor dem Teilen optimieren können. Dazu gehören Tipps zur Anpassung von Bitraten für die Codierung, zum Festlegen von Quantisierungsparametern, zur Auswahl des Videoformats, zur Auswahl geeigneter Dateigrößen oder zur Wirkung verschiedener Freigabeoptionen.
Sichtbarkeit von Medien verbessern
Ihren Medien relevante Metadaten wie Titel, Beschreibungen und Tags hinzufügen -Dateien ihre Auffindbarkeit verbessern. Nutzer auffordern, eigene hinzuzufügen Beschreibungen und Bildunterschriften verwenden, um die Nutzererfahrung weiter zu personalisieren.
Bildern Metadaten hinzufügen
Die Klasse Jetpack ExifInterface schreibt Metadaten in JPEG, PNG und WebP. Bilder in Form von EXIF-Tags.
// 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()