2015-05-09 8 views
8

la pagina Web che si sta caricando all'interno di Webview si sta riproducendo automaticamente in background, vorrei rilevare quando il suono si interrompe e viene visualizzato il messaggio di toast.Android - Identifica se la visualizzazione Web riproduce o meno il suono

grazie

+0

qualsiasi aiuto sarà molto apprezzato – Fou

+1

Cosa hai provato finora? A partire da ora, non vedo alcun codice o indicazione che tu abbia mai fatto qualche sforzo per risolverlo da solo. –

+0

@esme_louise Ho provato diverse idee per me non funziona, basta continuare a cambiare un codice in un altro ... – Fou

risposta

11

Quella può essere facilmente se si utilizza il JavascriptInterface. Segui il mio passo:

1.Creare un callback di interfaccia:

public class MediaWebInterface { 

    public MediaWebInterface() { 

    } 

    @JavascriptInterface 
    public void setEndedIndex(int pIndex) { 
     // Call when the audio ended. 
    } 

} 

2.Creare un javascript che contengono un "finita" ascoltatore:

<script type='text/javascript'>window.onload=function(){var n=document.getElementsByTagName("audio"),r=n.length;for(var o=0;o<r;o++)n[o].setAttribute("index",o),n[o].addEventListener("ended",function(){for(var e=0;e<r;e++)this===n[e]&&window.external.setEndedIndex(e)})} 
</script> 

3.Inserire i dati html in un String e aggiungere sopra javascript per i tuoi dati html String:

// Enable javascript support 
mWebView.getSettings().setJavaScriptEnabled(true); 
mWebView.addJavascriptInterface(new MediaWebInterface(mHandler), "external"); 
mWebView.loadDataWithBaseURL(mBaseURL, mHTMLData+aboveJavascript, null, "utf-8", null); 

4. Quando l'audio si ferma, chiamerà lo MediaWebInterface.setEndedIndex(pIndex) e pIndex è l'indice dell'audio.

Hava divertimento, e provalo!

Leggere prima il WebView.addJavascriptInterface()!

Avvisi: Se si utilizza proguard, è necessario aggiungere script di follow nel proprio proguard-project.txt. Altrimenti, la callback non sarà valida. Poiché il nome e il metodo della classe saranno offuscati, quindi il javascript non può richiamare.

//Preserved javaScript interface class 
-keepclassmembers class com.xxx.xxx.javascript.MediaWebInterface { 
    public *; 
} 
+1

1+ per l'avviso con proguard! Ottima risposta – apmartin1991

Problemi correlati