- Fehler des Typs „Klartext-HTTP-Traffic nicht zulässig“ beheben
- Fehler „SSLHandshakeException“, „CertPathValidatorException“ und „ERR_CERT_AUTHORITY_INVALID“ beheben
- Warum ist die Suche nach einigen Mediendateien nicht möglich?
- Warum ist die Suche in einigen MP3-Dateien ungenau?
- Warum ist die Suche in meinem Video langsam?
- Warum werden einige MPEG-TS-Dateien nicht abgespielt?
- Warum sind in einigen MPEG-TS-Dateien keine Untertitel vorhanden?
- Warum werden einige MP4-/FMP4-Dateien falsch wiedergegeben?
- Warum schlagen einige Streams mit dem HTTP-Antwortcode 301 oder 302 fehl?
- Warum schlagen einige Streams mit UnerkanntenInputFormatException fehl?
- Warum funktioniert „setWiedergabeParameters“ auf einigen Geräten nicht richtig?
- Was bedeutet die Fehlermeldung „Auf den Spieler wird im falschen Thread zugegriffen“?
- Wie kann ich den Fehler „Unerwartete Statuszeile: ICY 200 OK“ beheben?
- Wie kann ich abfragen, ob es sich bei dem wiedergegebenen Stream um einen Livestream handelt?
- Wie setze ich die Audiowiedergabe fort, wenn meine App im Hintergrund läuft?
- Warum unterstützt ExoPlayer meine Inhalte, die Cast-Bibliothek von ExoPlayer jedoch nicht?
- Warum werden Inhalte nicht abgespielt, aber es werden keine Fehler angezeigt?
- Wie kann ich eine Decodierungsbibliothek laden und für die Wiedergabe verwenden?
- Kann ich YouTube-Videos direkt mit ExoPlayer abspielen?
- Videowiedergabe ruckelt
- Instabile API-Lint-Fehler
Fehler des Typs „Klartext-HTTP-Traffic nicht zulässig“ beheben
Dieser Fehler tritt auf, wenn Ihre App Klartext-HTTP-Traffic anfordert (d. h. http://
statt https://
), obwohl die Netzwerksicherheitskonfiguration dies nicht zulässt. Wenn deine App auf Android 9 (API-Level 28) oder höher ausgerichtet ist, ist Klartext-HTTP-Traffic in der Standardkonfiguration deaktiviert.
Wenn Ihre App mit Klartext-HTTP-Traffic arbeiten muss, müssen Sie eine Netzwerksicherheitskonfiguration verwenden, die dies zulässt. Weitere Informationen finden Sie in der Dokumentation zur Netzwerksicherheit von Android. Wenn Sie jeglichen Klartext-HTTP-Traffic zulassen möchten, können Sie einfach android:usesCleartextTraffic="true"
in das application
-Element der AndroidManifest.xml
Ihrer App einfügen.
Die ExoPlayer-Demo-App verwendet die Standardkonfiguration für die Netzwerksicherheit und lässt daher keinen Klartext-HTTP-Traffic zu. Sie können es wie oben beschrieben aktivieren.
Fehler „SSLHandshakeException“, „CertPathValidatorException“ und „ERR_CERT_AUTHORITY_INVALID“ beheben
SSLHandshakeException
, CertPathValidatorException
und ERR_CERT_AUTHORITY_INVALID
weisen auf ein Problem mit dem SSL-Zertifikat des Servers hin. Diese Fehler sind nicht ExoPlayer-spezifisch. Weitere Informationen finden Sie in der SSL-Dokumentation von Android.
Warum kann nach einigen Mediendateien nicht gesucht werden?
Standardmäßig unterstützt ExoPlayer keine Suche in Medien. Die einzige Methode für genaue Suchvorgänge besteht darin, dass der Player die gesamte Datei scannt und indexiert. ExoPlayer stuft solche Dateien als nicht lesbar ein. Die meisten modernen Mediencontainerformate enthalten Metadaten für die Suche (z. B. ein Stichprobenindex), haben einen klar definierten Suchalgorithmus (z. B. die interpolierte Suche nach Ogg) oder geben an, dass ihr Inhalt eine konstante Bitrate hat. In diesen Fällen sind effiziente Suchvorgänge möglich und werden von ExoPlayer unterstützt.
Wenn Sie eine Suche benötigen, aber über nicht lesbare Medien verfügen, empfehlen wir, die Inhalte in ein geeigneteres Containerformat zu konvertieren. Bei MP3-, ADTS- und AMR-Dateien können Sie die Suche auch unter der Annahme aktivieren, dass die Dateien eine konstante Bitrate haben, wie hier beschrieben.
Warum ist die Suche in einigen MP3-Dateien ungenau?
MP3-Dateien mit variabler Bitrate (VBR) sind grundsätzlich nicht für Anwendungsfälle geeignet, in denen eine exakte Suche erforderlich ist. Dafür gibt es zwei Gründe:
- Für eine genaue Suche bietet ein Containerformat im Idealfall eine genaue Zeit-zu-Byte-Zuordnung in einem Header. Durch diese Zuordnung kann ein Player eine angeforderte Suchzeit dem entsprechenden Byte-Offset zuordnen und mit dem Anfordern, Parsen und Abspielen von Medien von diesem Offset aus beginnen. Die verfügbaren Header (z. B. XING-Header) zur Angabe dieser Zuordnung in MP3 sind leider oft ungenau.
- Bei Containerformaten, die keine genaue Zeit-zu-Byte-Zuordnung (oder überhaupt keine Zeit-zu-Byte-Zuordnung) bieten, ist es dennoch möglich, eine exakte Suche durchzuführen, wenn der Container absolute Beispielzeitstempel im Stream enthält. In diesem Fall kann ein Player die Suchzeit einer bestmöglichen Schätzung des entsprechenden Byte-Offsets zuordnen, Medien aus diesem Offset anfordern, den Zeitstempel der ersten absoluten Stichprobe parsen und effektiv eine geführte binäre Suche in den Medien durchführen, bis das richtige Sample gefunden ist. Leider enthält MP3 keine absoluten Beispielzeitstempel im Stream, sodass dieser Ansatz nicht möglich ist.
Aus diesem Grund besteht die einzige Möglichkeit für eine exakte Suche in einer VBR-MP3-Datei darin, die gesamte Datei zu scannen und manuell eine Zeit-zu-Byte-Zuordnung im Player zu erstellen. Diese Strategie kann mit FLAG_ENABLE_INDEX_SEEKING
aktiviert werden, das mit setMp3ExtractorFlags
für eine DefaultExtractorsFactory
festgelegt werden kann. Eine gute Skalierung für große MP3-Dateien ist nicht möglich, vor allem, wenn der Nutzer versucht, kurz nach dem Start der Wiedergabe bis zum Ende des Streams zu springen. In diesem Fall muss der Player warten, bis der gesamte Stream heruntergeladen und indexiert wurde, bevor er die Suche durchführt. In ExoPlayer haben wir uns entschieden, in diesem Fall die Geschwindigkeit statt der Genauigkeit zu optimieren. FLAG_ENABLE_INDEX_SEEKING
ist daher standardmäßig deaktiviert.
Wenn Sie die Wiedergabe von Medien steuern, empfehlen wir Ihnen dringend, ein geeigneteres Containerformat wie MP4 zu verwenden. Es gibt keine bekannten Anwendungsfälle, bei denen MP3 die beste Wahl für ein Medienformat ist.
Warum ist die Suche in meinem Video langsam?
Wenn der Player in einem Video zu einer neuen Wiedergabeposition navigiert, sind zwei Dinge erforderlich:
- Laden Sie die Daten, die der neuen Wiedergabeposition entsprechen, in den Zwischenspeicher. Dies ist möglicherweise nicht erforderlich, wenn diese Daten bereits zwischengespeichert wurden.
- Leeren Sie den Videodecoder und beginnen Sie mit der Decodierung vom I-Frame (Keyframe) vor der neuen Wiedergabeposition. Dies ist auf die Intra-Frame-Codierung der meisten Videokomprimierungsformate zurückzuführen. Um sicherzustellen, dass die Suche genau ist (d. h., die Wiedergabe beginnt genau an der Suchposition), müssen alle Frames zwischen dem vorherigen I-Frame und der Suchposition decodiert und sofort verworfen werden (ohne auf dem Bildschirm angezeigt zu werden).
Die durch (1) erzeugte Latenz kann abgemildert werden, indem entweder die Menge der vom Player im Arbeitsspeicher zwischengespeicherten Daten erhöht oder die Daten vorab im Cache gespeichert werden.
Die durch (2) erzeugte Latenz kann abgemildert werden, indem entweder die Genauigkeit der Suche mit ExoPlayer.setSeekParameters
verringert oder das Video neu codiert wird, sodass es häufigere I-Frames hat (was zu einer größeren Ausgabedatei führt).
Warum werden einige MPEG-TS-Dateien nicht abgespielt?
Einige MPEG-TS-Dateien enthalten keine Access Unit Delimiter (AUDs). Standardmäßig nutzt ExoPlayer zur kostengünstigen Erkennung von Frame-Grenzen AUDs. Außerdem enthalten einige MPEG-TS-Dateien keine IDR-Keyframes. Standardmäßig sind dies der einzige Keyframe-Typ, der von ExoPlayer berücksichtigt wird.
Wenn ExoPlayer zum Abspielen einer MPEG-TS-Datei ohne AUD- oder IDR-Keyframes aufgefordert wird, erscheint der Zwischenspeichervorgang bei ExoPlayer. Wenn Sie solche Dateien abspielen müssen, können Sie FLAG_DETECT_ACCESS_UNITS
bzw. FLAG_ALLOW_NON_IDR_KEYFRAMES
verwenden. Diese Flags können mit setTsExtractorFlags
für einen DefaultExtractorsFactory
oder mit dem Konstruktor für ein DefaultHlsExtractorFactory
festgelegt werden.
Die Verwendung von FLAG_DETECT_ACCESS_UNITS
ist im Vergleich zur AUD-basierten Erkennung der Frame-Grenzen rechenintensiv und hat keine weiteren Nebenwirkungen. Die Verwendung von FLAG_ALLOW_NON_IDR_KEYFRAMES
kann bei der Wiedergabe einiger MPEG-TS-Dateien zu vorübergehenden Bildfehlern beim Start der Wiedergabe und direkt nach der Suche führen.
Warum werden in einigen MPEG-TS-Dateien keine Untertitel gefunden?
Einige MPEG-TS-Dateien enthalten CEA-608-Tracks, deklarieren sie aber nicht in den Containermetadaten, sodass ExoPlayer sie nicht erkennen kann. Sie können alle Untertiteltracks manuell angeben. Dazu stellen Sie eine Liste der erwarteten Untertitelformate für DefaultExtractorsFactory
bereit, einschließlich der Kanäle für die Barrierefreiheit, die zu ihrer Identifizierung im MPEG-TS-Stream verwendet werden können:
Kotlin
val extractorsFactory = DefaultExtractorsFactory() .setTsSubtitleFormats( listOf( Format.Builder() .setSampleMimeType(MimeTypes.APPLICATION_CEA608) .setAccessibilityChannel(accessibilityChannel) // Set other subtitle format info, such as language. .build() ) ) val player: Player = ExoPlayer.Builder(context, DefaultMediaSourceFactory(context, extractorsFactory)).build()
Java
DefaultExtractorsFactory extractorsFactory = new DefaultExtractorsFactory() .setTsSubtitleFormats( ImmutableList.of( new Format.Builder() .setSampleMimeType(MimeTypes.APPLICATION_CEA608) .setAccessibilityChannel(accessibilityChannel) // Set other subtitle format info, such as language. .build())); Player player = new ExoPlayer.Builder(context, new DefaultMediaSourceFactory(context, extractorsFactory)) .build();
Warum werden einige MP4-/FMP4-Dateien nicht richtig wiedergegeben?
Einige MP4-/FMP4-Dateien enthalten Bearbeitungslisten, in denen die Medienzeitachse neu geschrieben wird, indem Stichprobenlisten übersprungen, verschoben oder wiederholt werden. ExoPlayer bietet teilweise Unterstützung für das Anwenden von Bearbeitungslisten. Sie kann beispielsweise Gruppen von Samples, die mit einem Synchronisierungsbeispiel beginnen, verzögern oder wiederholen. Audiobeispiele oder Pre-Roll-Medien für Bearbeitungen, die nicht an einem Synchronisierungsbeispiel beginnen, werden jedoch nicht abgeschnitten.
Wenn Sie feststellen, dass ein Teil des Mediums unerwartet fehlt oder wiederholt wird, legen Sie Mp4Extractor.FLAG_WORKAROUND_IGNORE_EDIT_LISTS
oder FragmentedMp4Extractor.FLAG_WORKAROUND_IGNORE_EDIT_LISTS
fest. Dies führt dazu, dass der Extrahierer Bearbeitungslisten vollständig ignoriert. Diese können mit setMp4ExtractorFlags
oder setFragmentedMp4ExtractorFlags
für ein DefaultExtractorsFactory
festgelegt werden.
Warum schlagen einige Streams mit dem HTTP-Antwortcode 301 oder 302 fehl?
Die HTTP-Antwortcodes 301 und 302 zeigen beide eine Weiterleitung an. Kurze Beschreibungen finden Sie auf Wikipedia. Wenn ExoPlayer eine Anfrage stellt und eine Antwort mit dem Statuscode 301 oder 302 erhält, folgt es normalerweise der Weiterleitung und startet die Wiedergabe wie gewohnt. Dies geschieht jedoch nicht standardmäßig bei protokollübergreifenden Weiterleitungen. Bei einer protokollübergreifenden Weiterleitung erfolgt eine Weiterleitung von HTTPS zu HTTP oder umgekehrt (oder seltener zwischen zwei Protokollpaaren). Mit dem wget-Befehlszeilentool können Sie folgendermaßen testen, ob eine URL eine protokollübergreifende Weiterleitung verursacht:
wget "https://yourserver.com/test.mp3" 2>&1 | grep Location
Die Ausgabe sollte in etwa so aussehen:
Location: https://second.com/test.mp3 [following]
Location: http://third.com/test.mp3 [following]
In diesem Beispiel gibt es zwei Weiterleitungen. Die erste Weiterleitung führt von https://yourserver.com/test.mp3
zu https://second.com/test.mp3
. Beide sind HTTPS, sodass es sich nicht um eine protokollübergreifende Weiterleitung handelt. Die zweite Weiterleitung führt von https://second.com/test.mp3
zu http://third.com/test.mp3
. Diese Weiterleitung erfolgt von HTTPS zu HTTP, ebenso wie eine protokollübergreifende Weiterleitung. ExoPlayer folgt dieser Weiterleitung in der Standardkonfiguration nicht, sodass die Wiedergabe fehlschlägt.
Bei Bedarf können Sie ExoPlayer so konfigurieren, dass bei der Instanziierung von DefaultHttpDataSource.Factory
-Instanzen in Ihrer Anwendung protokollübergreifende Weiterleitungen verwendet werden. Weitere Informationen zum Auswählen und Konfigurieren des Netzwerkstacks finden Sie hier.
Warum treten bei einigen Streams Fehler auf?
Diese Frage bezieht sich auf Wiedergabefehler in folgender Form:
UnrecognizedInputFormatException: None of the available extractors
(MatroskaExtractor, FragmentedMp4Extractor, ...) could read the stream.
Für diesen Fehler gibt es zwei mögliche Ursachen. Die häufigste Ursache ist, dass Sie versuchen, DASH (mpd), HLS (m3u8) oder SmoothStreaming (ism, ISml)-Inhalte abzuspielen, der Player versucht jedoch, diesen als Progressive-Stream abzuspielen. Zum Abspielen solcher Streams ist das jeweilige ExoPlayer-Modul erforderlich. Falls der Stream-URI nicht mit der Standarddateierweiterung endet, können Sie auch MimeTypes.APPLICATION_MPD
, MimeTypes.APPLICATION_M3U8
oder MimeTypes.APPLICATION_SS
an setMimeType
von MediaItem.Builder
übergeben, um den Streamtyp explizit anzugeben.
Die zweite, seltenere Ursache ist, dass ExoPlayer das Containerformat der Medien, die Sie wiedergeben möchten, nicht unterstützt. In diesem Fall funktioniert der Fehler wie vorgesehen. Sie können jedoch eine Funktionsanfrage an unsere Problemverfolgung senden, einschließlich Details zum Containerformat und einem Teststream. Suchen Sie nach einer bestehenden Funktionsanfrage, bevor Sie eine neue einreichen.
Warum funktioniert „setWiedergabeParameters“ auf einigen Geräten nicht richtig?
Wenn Sie einen Debug-Build Ihrer App unter Android M und niedriger ausführen, kann es bei der Verwendung der setPlaybackParameters
API zu einer ruckeligen Leistung, hörbaren Artefakten und einer hohen CPU-Auslastung kommen. Das liegt daran, dass eine für diese API wichtige Optimierung für Debug-Builds deaktiviert ist, die auf diesen Android-Versionen ausgeführt werden.
Beachten Sie, dass dieses Problem nur Debug-Builds betrifft. Sie hat keinen Einfluss auf Release-Builds, für die die Optimierung immer aktiviert ist. Daher dürfte die Releases, die Sie Endnutzern zur Verfügung stellen, von diesem Problem nicht betroffen sein.
Was bedeutet die Fehlermeldung „Auf den Spieler wird im falschen Thread zugegriffen“?
Weitere Informationen finden Sie auf der Seite „Erste Schritte“ unter Hinweis zu Threads.
Wie kann ich den Fehler „Unerwartete Statuszeile: ICY 200 OK“ beheben?
Dieses Problem kann auftreten, wenn die Serverantwort eine ICY-Statuszeile statt einer HTTP-konformen Zeile enthält. ICY-Statuszeilen wurden eingestellt und sollten nicht verwendet werden. Wenn Sie den Server steuern, sollten Sie ihn so aktualisieren, dass eine HTTP-konforme Antwort zurückgegeben wird. Wenn das nicht möglich ist, können Sie das Problem mithilfe der ExoPlayer OkHttp-Bibliothek beheben, da diese ICY-Statuszeilen korrekt verarbeiten kann.
Wie kann ich abfragen, ob der abgespielte Stream ein Livestream ist?
Du kannst die isCurrentWindowLive
-Methode des Players abfragen. Außerdem können Sie isCurrentWindowDynamic
prüfen, um herauszufinden, ob das Fenster dynamisch ist (d. h., die Aktualisierung wird im Laufe der Zeit beibehalten).
Wie setze ich die Audiowiedergabe fort, wenn meine App im Hintergrund läuft?
So kannst du dafür sorgen, dass Audioinhalte auch dann weiterhin abgespielt werden, wenn die App im Hintergrund ausgeführt wird:
- Sie benötigen einen laufenden Dienst im Vordergrund. Dadurch wird verhindert, dass das System Ihren Prozess beendet, um Ressourcen freizugeben.
- Du musst eine
WifiLock
und eineWakeLock
in der Hand halten. Diese sorgen dafür, dass das System die WLAN-Funkschnittstelle und die CPU aktiv hält. Wenn SieExoPlayer
verwenden, ist dies einfach. Rufen Sie dazusetWakeMode
auf. Dadurch werden die erforderlichen Sperren zum richtigen Zeitpunkt automatisch akquiriert und freigegeben.
Es ist wichtig, dass Sie die Sperren aufheben (wenn Sie nicht setWakeMode
verwenden) und den Dienst beenden, sobald keine Audioinhalte mehr abgespielt werden.
Warum unterstützt ExoPlayer meine Inhalte, die Cast-Bibliothek von ExoPlayer jedoch nicht?
Möglicherweise ist der Inhalt, den Sie wiedergeben möchten, nicht CORS-fähig. Für das Cast-Framework müssen Inhalte CORS aktiviert sein, damit sie abgespielt werden können.
Warum werden Inhalte nicht abgespielt, aber es werden keine Fehler angezeigt?
Möglicherweise unterstützt das Gerät, auf dem Sie die Inhalte wiedergeben, ein bestimmtes Medienbeispielformat nicht. Dies lässt sich leicht prüfen, indem Sie dem Player einen EventLogger
als Listener hinzufügen und in Logcat nach einer Zeile wie dieser suchen:
[ ] Track:x, id=x, mimeType=mime/type, ... , supported=NO_UNSUPPORTED_TYPE
NO_UNSUPPORTED_TYPE
bedeutet, dass das Gerät das in mimeType
angegebene Medienbeispielformat nicht decodieren kann. Informationen zu den unterstützten Beispielformaten findest du in der Dokumentation zu Android-Medienformaten. Wie kann ich dafür sorgen, dass eine Decodierungsbibliothek geladen und für die Wiedergabe verwendet wird?
Wie kann ich eine Decodierungsbibliothek laden und für die Wiedergabe verwenden?
- Bei den meisten Decoderbibliotheken sind manuelle Schritte zum Auschecken und Erstellen der Abhängigkeiten erforderlich. Führen Sie daher die Schritte in der Infodatei für die jeweilige Bibliothek aus. Für die ExoPlayer-FFmpeg-Bibliothek müssen Sie beispielsweise der Anleitung unter domains/decoder_ffmpeg/README.md folgen, einschließlich der Übergabe von Konfigurations-Flags, um Decodierer für alle Formate zu aktivieren, die wiedergegeben werden sollen.
- Achten Sie bei Bibliotheken mit nativem Code darauf, dass Sie die richtige Version des Android-NDK verwenden, wie in der README-Datei angegeben, und suchen Sie nach Fehlern, die während der Konfiguration und Erstellung auftreten. Nachdem Sie die Schritte in der README-Datei ausgeführt haben, sollten für jede unterstützte Architektur im Unterverzeichnis
libs
des Bibliothekspfads.so
-Dateien angezeigt werden. - Wie Sie die Wiedergabe mithilfe der Bibliothek in der Demo-App testen, erfahren Sie unter Gebündelte Decodierer aktivieren. Eine Anleitung zur Verwendung der Bibliothek über Ihre eigene Anwendung finden Sie in der README-Datei für die Bibliothek.
- Wenn Sie
DefaultRenderersFactory
verwenden, sollte beim Laden des Decoders in Logcat eine Protokollzeile auf Infoebene wie „Loaded FfmpegAudioRenderer“ angezeigt werden. Wenn diese Angabe fehlt, prüfen Sie, ob die Anwendung eine Abhängigkeit von der Decodierungsbibliothek hat. - Wenn in Logcat Logs auf Warnungsebene von
LibraryLoader
angezeigt werden, ist das Laden der nativen Komponente der Bibliothek fehlgeschlagen. Prüfen Sie in diesem Fall, ob Sie die Schritte in der README-Datei der Bibliothek korrekt ausgeführt haben und keine Fehler ausgegeben haben.
Wenn Sie weiterhin Probleme bei der Verwendung von Decodierungsbibliotheken haben, finden Sie in der Media3-Problemverfolgung aktuelle relevante Probleme. Wenn Sie ein neues Problem melden müssen, das sich auf das Erstellen des nativen Teils der Bibliothek bezieht, fügen Sie die vollständige Befehlszeilenausgabe aus der Ausführung der Readme-Anleitung hinzu, damit wir das Problem diagnostizieren können.
Kann ich YouTube-Videos direkt mit ExoPlayer abspielen?
Nein, ExoPlayer kann keine Videos von YouTube abspielen, z. B. URLs des Formats https://www.youtube.com/watch?v=...
. Verwende stattdessen die YouTube iFrame Player API, die offiziell zum Abspielen von YouTube-Videos auf Android-Geräten.
Videowiedergabe ruckelt
Das Gerät kann den Inhalt möglicherweise nicht schnell genug decodieren, wenn beispielsweise die Bitrate oder Auflösung des Inhalts die Gerätekapazitäten übersteigt. Möglicherweise müssen Sie Inhalte geringerer Qualität verwenden, um auf solchen Geräten eine gute Leistung zu erzielen.
Wenn Videos auf einem Gerät mit Android 6.0 (API-Level 23) bis einschließlich Android 11 (API-Level 30) ruckeln, insbesondere beim Abspielen von DRM-geschützten Inhalten oder Inhalten mit hoher Framerate, können Sie die asynchrone Zwischenspeicherung ausprobieren.
Instabile API-Lint-Fehler
Media3 garantiert die Binärkompatibilität für einen Teil der API-Oberfläche. Die Teile, die die Binärkompatibilität nicht garantieren, sind mit @UnstableApi
gekennzeichnet. Zur Klarstellung dieser Unterscheidung erzeugen die Verwendung instabiler API-Symbole einen Lint-Fehler, sofern sie nicht mit @OptIn
annotiert sind.
Die Annotation @UnstableApi
impliziert nichts über die Qualität oder Leistung einer API, sondern nur die Tatsache, dass sie nicht „API-gefroren“ ist.
Sie haben zwei Möglichkeiten, um instabile API-Lint-Fehler zu beheben:
- Verwenden Sie eine stabile API, mit der das gleiche Ergebnis erzielt wird.
- Verwenden Sie weiterhin die instabile API und annotieren Sie die Nutzung mit
@OptIn
, wie später gezeigt wird.
Anmerkung @OptIn
hinzufügen
Android Studio kann Ihnen helfen, die Anmerkung hinzuzufügen:
Sie können bestimmte Nutzungswebsites auch manuell in Kotlin mit Anmerkungen versehen:
import androidx.annotation.OptIn
import androidx.media3.common.util.UnstableApi
@OptIn(UnstableApi::class)
fun functionUsingUnstableApi() { ... }
Und auch in Java:
import androidx.annotation.OptIn;
import androidx.media3.common.util.UnstableApi;
@OptIn(markerClass = UnstableApi.class)
private void methodUsingUnstableApis() { ... }
Du kannst ganze Pakete aktivieren, indem du eine package-info.java
-Datei hinzufügst:
@OptIn(markerClass = UnstableApi.class)
package name.of.your.package;
import androidx.annotation.OptIn;
import androidx.media3.common.util.UnstableApi;
Sie können ganze Projekte aktivieren, indem Sie den spezifischen Lint-Fehler in der lint.xml
-Datei unterdrücken:
<?xml version="1.0" encoding="utf-8"?>
<lint>
<issue id="UnsafeOptInUsageError">
<option name="opt-in" value="androidx.media3.common.util.UnstableApi" />
</issue>
</lint>
Es gibt auch eine kotlin.OptIn
-Annotation, die nicht verwendet werden sollte. Es ist wichtig, die Annotation androidx.annotation.OptIn
zu verwenden.