Warum kann ich in HTML AudioElement in Android WebView nicht die aktuelle Zeit und die Dauer auf 0 setzen?

8

Bitte verzeihen Sie mir, aber während ich diese Frage schrieb, kamen einige Ideen auf, so dass die Frage als Protokoll der Ereignisse erscheinen kann, aber Sie können sicher zum TL; DR -Teil springen.

Ich habe ein AAR -Modul, in dem ich ein WebView verwende, um eine Seite anzuzeigen und Audiodateien mit unterschiedlicher Startzeit abzuspielen - abhängig vom Kontext. Ich habe zwei Apps, in denen ich das AAR -Modul teste: eine Test-App, die zum Ausführen des Moduls erforderlich ist, und die echte App, bei der es eine Weile dauert, bis der Modulfluss erreicht ist .

Ich wurde über einen Fehler auf mehreren Testgeräten informiert, bei denen die Audiowiedergabe immer bei 0 beginnt, ganz zu schweigen von dem verwendeten Audioelement currentTime setting.

Hier ist mein Code, wo die Wiedergabe erfolgt:

%Vor%

Wie in den Kommentaren erwähnt, habe ich einige Haltepunkte hinzugefügt, um zu überprüfen, was vor sich geht, und hier sind einige Schlussfolgerungen:

  • Nachdem oncanplaythrough event aufgerufen wurde, wird die Dauer auf 0 ,
  • gesetzt
  • Wenn die currentTime des Audioelements auf einen anderen Wert als 0 gesetzt wird, bleibt es bei 0 ,
  • Die Audiodatei wird wiedergegeben und die Wiedergabezeit wird im currentTime -Wert wiedergegeben.

Laut W3Schools Website ist canplaythrough das letzte mögliche Ereignis, das beim Laden der Audiodatei aufgerufen wird.

Das genannte Szenario ist auf 10% unserer Testgeräte möglich. Diese Geräte stammen von verschiedenen Herstellern (Lenovo, Samsung) und haben unterschiedliche Android-Versionen (5.0.1, 6.0.1). Ich habe auch andere Geräte von diesen Herstellern, die funktionieren.

Ich habe mich dazu entschieden, meine Bare-Bones-App zu testen, weil sie schneller ist und etwas Seltsames passiert ist - sie funktioniert auf den oben genannten 10% der Testgeräte einwandfrei:

  • duration wird korrekt gemeldet, nachdem oncanplaythrough event ausgelöst wurde,
  • Die Einstellung von currentTime wird im Audioelement
  • wiedergegeben
  • Audio beginnt ab dem angeforderten Zeitpunkt zu spielen.

Ich war ziemlich geschockt, also habe ich alle möglichen Unterschiede zwischen den Apps überprüft:

  • die gleichen Build-Gradle-Einstellungen wurden verwendet
  • die gleichen Versionen von Bibliotheken wurden verwendet
  • die gleichen Methoden werden aufgerufen, um die Bibliothek zu initiieren
  • dieselbe AAR -Datei wird in beiden Projekten verwendet

Ich habe einen Unterschied gefunden, die beiden Apps würden ihre Daten an verschiedenen Orten speichern. Die Haupt-App, speichert Daten im Dokumenten-Verzeichnis, meine Bare-Bones-App speichert ihre Daten im externen Speicher [so ist es einfacher zu debuggen].

Nachdem ich den Speicherpfad für die Haupt-App auf extern geändert habe, begann die App ordnungsgemäß zu funktionieren und das Audio korrekt abzuspielen.

Ich weiß, dass ich nicht einfach auf Daten zugreifen kann, die in APK gespeichert sind, aber diese Daten werden aus dem Netzwerk heruntergeladen und im Dokumentenverzeichnis gespeichert, daher würde ich keine Einschränkungen erwarten.

TL; DR

Beim Laden von Audiodateien im HTML-Audioelement aus dem Dokumentenverzeichnis der App im canplaythrough -Ereignis kann ich nicht auf duration des Audioelements zugreifen (es ist 0) oder currentTime setzen (bleibt bei 0 bis zur Wiedergabe). Wenn die gleiche Datei von externem Speicher (eingebautem Speicher) geladen wird, funktioniert es gut und ich kann die Audio-Datei duration bekommen und die currentTime -Eigenschaft einstellen.

Was kann ich tun, damit es funktioniert, während sich Audio im Dokumentenverzeichnis der App befindet?

    
Krystian 04.08.2017, 11:35
quelle

1 Antwort

2

Ich bin mir nicht sicher, warum es einige Geräte betrifft, und es betrifft nicht andere Geräte, aber ich ging durch die Quellen des Chromium-Projekts und stolperte darüber:

Ссылка

und um genauer zu sein:

%Vor%

Ich habe das Dokumentenverzeichnis in das Cache-Verzeichnis geändert und alles funktioniert wie erwartet.

    
Krystian 06.08.2017, 20:51
quelle

Tags und Links