Android: Abspielen eines Asset-Sounds mit WebView

8

Ich versuche, einen Sound aus dem Assets-Ordner abzuspielen, wenn ein Benutzer auf ein Tag im WebView meiner Anwendung klickt. Ich fand, dass ich eine neue Klasse erweitern WebViewClient können Sie die Erweiterung einer Verbindung erkennen und, wenn es sich um eine MP3-Datei ist, kann er es über die Standard-Audio-Player spielen. Aber ich möchte, dass es innerhalb der Aktivität spielt, ohne eine neue Aktivität zu starten.

Ich habe die folgenden Links als Referenzen verwendet: Ton in Webview und Fehler beim Erstellen des Mediaplayer mit Uri oder Datei in Vermögenswerten

Aber es hat nicht funktioniert.

Ich habe versucht, die folgenden Codes zu verwenden:

%Vor%

Ich bekomme einen undefinierten Methodenfehler auf dem getAssets (), ich habe es versucht, googlen und es sagt etwas über die Weitergabe eines Kontexts aus. Ich bin sehr neu für Android und objektorientiertes Programmieren, so frage ich mich, ob dies der richtige Weg, es zu tun, und wenn es eine einfache Erklärung ist, auf das, was ein Kontext ist. Danke.

Unten sind meine vollständigen Codes:

MainActivity.class

%Vor%

BEARBEITEN

So die Codes funktioniert dank Ссылка aber jetzt ein anderes Problem auftritt, ich die MyWebViewClient in das folgende Update:

%Vor%

Aber ich bekomme eine java.io.FileNotFoundException, der Pfad scheint jedoch richtig. Ich habe ein Vermögen von 2 MP3-Dateien setzen / Webseiten / Sounds / 1.mp3 und Vermögen / Webseiten / 1.mp3 und verwendete den folgenden HTML-Codes zu testen:

%Vor%

Aber ich bekomme den folgenden Fehler auf LogCat:

%Vor%

Ist etwas falsch mit der Art, wie ich die Datei angerufen habe? Danke schonmal.

Gelöst

Danke an squonks Vorschläge, ich habe die folgenden Codes ausprobiert, damit es funktioniert und es hat gut funktioniert, danke Squonk!

%Vor%

Und das html, um es zu testen:

%Vor%

Ich habe zwar einen Fehler erhalten, wenn ich wiederholt darauf klicke, aber das ist eine andere Frage: D Wie schließt man seine Frage? & gt;. & lt;

    
Rangga Wiratno 10.06.2012, 03:51
quelle

1 Antwort

3

Wenn Sie Ihre MediaPLayer in MyWebViewClient deklarieren, fügen Sie Folgendes hinzu:

%Vor%

Fügen Sie dann einen Konstruktor zu MyWebViewClient wie folgt hinzu ...

%Vor%

Dann in shouldOverrideUrlLoading(...) bekomme dein Vermögen wie folgt ...

%Vor%

Setzen Sie in Ihrer MainActivity WebViewClient , indem Sie this (was die Aktivität Context ist) wie folgt übergeben ...

%Vor%

Sie sollten auch false von shouldOverrideUrlLoading(...) zurückgeben, wenn die URL mit '.mp3' endet - dies zeigt an, dass Ihre WebView Dinge verarbeitet und die 'Host'-Anwendung keine Instanz des Webbrowsers starten sollte.

BEARBEITEN: Um Audiodateien aus dem Verzeichnis "Assets" abzuspielen, müssen Sie die Datenquelle anders einstellen - siehe die akzeptierte Antwort auf play-audio-file-from-the-assets-Verzeichnis .

Sie sollten auch mp.prepare() aufrufen, bevor Sie mp.start() aufrufen.

    
Squonk 10.06.2012, 06:08
quelle