it-swarm.com.de

Wie kann ich die Wiedergabe von Youtube-Videos in Android Webview stoppen?

Wie kann ich ein YouTube-Video anhalten, das in meinem Webview abgespielt wird? Wenn ich auf die Schaltfläche "Zurück" klicke, wird das Video nicht angehalten und im Hintergrund fortgesetzt.

Code:

webView = (WebView) findViewById(R.id.webview); 
webView.getSettings().setPluginsEnabled(true);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setBuiltInZoomControls(false); 
webView.getSettings().setSupportZoom(false);
webView.loadData(myUrl,"text/html", "utf-8");
61
Droid

Siehe den folgenden Beitrag über WebView-Threads werden nicht angehalten

Im Wesentlichen müssen Sie die onPause-Methode des WebView über die onPause-Methode Ihrer eigenen Aktivität aufrufen. 

Der einzige Trick dabei ist, dass Sie die onPause-Methode des WebView nicht direkt aufrufen können, da sie ausgeblendet ist. Daher müssen Sie es indirekt über Reflektion aufrufen. Mit dem folgenden Code können Sie die onPause-Methode Ihrer eigenen Activity einrichten:

@Override
public void onPause() {
    super.onPause();

    try {
        Class.forName("Android.webkit.WebView")
                .getMethod("onPause", (Class[]) null)
                            .invoke(webview, (Object[]) null);

    } catch(ClassNotFoundException cnfe) {
        ...
    } catch(NoSuchMethodException nsme) {
        ...
    } catch(InvocationTargetException ite) {
        ...
    } catch (IllegalAccessException iae) {
        ...
    }
}

Beachten Sie, dass die Variable 'webview' im obigen try-Block eine private Instanzvariable für die Klasse ist und der in der onCreate-Methode der Activity zugewiesen wird.

88
Andrew Thompson

Lösung: 1 - Nachdem ich viel Zeit verbracht hatte, kam ich zu dem Schluss, pausiere das Video, das mit dem WebView <iframe>-Konzept von HTML läuft.

Überschreiben Sie einfach die onPause()-Methode in Activity oder Fragment, wo immer Sie WebView verwendet haben, und rufen Sie sie auf. Für mich geht das.

@Override
public void onPause() {
    super.onPause();
    mWebView.onPause();
}

@Override
public void onResume() {
    super.onResume();
    mWebView.onResume();
}

Lösung: 2 - Wenn die oben genannte Lösung für Sie nicht funktioniert, können Sie WebView zwingen, eine nicht vorhandene HTML-Datei zu laden.

mWebview.loadUrl("file:///Android_asset/nonexistent.html");
64
vishesh chandra

sie müssen auch die onResume () -Methode implementieren, oder das zweite Mal funktioniert sie nicht

@Override
public void onResume()
{
    super.onResume();
    webView.onResume();
}

@Override
public void onPause()
{
    super.onPause();
    webView.onPause();
}
17
CLucera

Die obige Lösung ist für mich auf dem Samsung Galaxy S mit Android 2.3.3 fehlgeschlagen ... Aber ich habe Erfolg mit der folgenden Problemumgehung gemacht:

    webview.loadUrl("file:///Android_asset/nonexistent.html");

Ich zwinge die Webansicht, eine nicht vorhandene HTML-Datei zu laden. Dies scheint den Webview zu zwingen, die Dinge aufzuräumen.

15
dangel

Versuche dies:

@Override
public void onPause() {
    super.onPause();
    myWebView.onPause();
    myWebView.pauseTimers();
}

@Override
public void onResume() {
    super.onResume();
    myWebView.resumeTimers();
    myWebView.onResume();
}


@Override
protected void onDestroy() {
    myWebView.destroy();
    myWebView = null;
    super.onDestroy();
}
5
Joolah
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // TODO Auto-generated method stub
    if(keyCode==event.KEYCODE_BACK)
    {
        mWebview.loadUrl("");
        mWebview.stopLoading();

        finish();

    }
    return super.onKeyDown(keyCode, event);
}

es klappt

4
user3437083

Und hier ist mein persönlicher Favorit:

@Override
protected void onPause() {
    super.onPause();
    if (isFinishing()) {
        webView.loadUrl("about:blank");
    } else {
        webView.onPause();
        webView.pauseTimers();
    }
}

@Override
protected void onResume() {
    super.onResume();
    webView.resumeTimers();
    webView.onResume();
}

Die Webansicht wird angehalten, wenn die Ansicht nur angehalten ist. Sie wird jedoch gelöscht, wenn die Aktivität abgeschlossen ist.

Dies erfordert mindestens Android 3.0 - API 11 (Honeycomb)

4
Björn Kechel

Webview.loadUrl ("about: blank");

es funktioniert auch

3
Sanghwa Jung

Nachdem dieses Problem aufgetreten ist, scheint es, dass onPause möglicherweise nichts tut ... für mich hörte es nicht auf, was im Hintergrund abgespielt wurde.

so sieht mein code jetzt aus

@Override
protected void onPause() {
    mWebView.onPause();
    super.onPause();
}

@Override
protected void onResume() {
    mWebView.onResume();
    super.onResume();
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    mWebView.saveState(outState);
    super.onSaveInstanceState(outState);
}

@Override
protected void onDestroy() {
    mWebView.destroy();
    mWebView = null;        
    super.onDestroy();
}

Ich hoffe es hilft jedem, der das gleiche Problem hat wie ich

3

sie können es versuchen

webView.loadUrl("javascript:document.location=document.location");

wenn die zu ladende Seite eine ist, die Sie bearbeiten können, können Sie eine Javascript-Methode schreiben, die den Ton stoppt und anruft, wenn Sie wie gewünscht aufhören möchten.

Javascript-Funktion

 function stopAudio(){
    audios=document.querySelectorAll('audio');
      for(i=0;i<audios.length;i++){
       audios[i].stop();
      }
    }

From Andorid Diese Methode aufrufen

webView.loadUrl("javascript:stopAudio()");

wenn die Seite von Ihnen nicht bearbeitet werden kann, können Sie den js-Code einfügen

   @Override
   public void onPageFinished(WebView view, String url) {
      super.onPageFinished(view, url);

      injectScriptFile(view, "js/script.js"); 

   }

Wie man hier im Detail injiziert

1

Das arbeitet für mich.

@Override
protected void onPause() {
    super.onPause();
    if (wViewCampaign != null){
        wViewCampaign.stopLoading(); 
        wViewCampaign.loadUrl("");
        wViewCampaign.reload();
        wViewCampaign = null;
    }
}

Sie können dies tun, indem Sie die Methode onPause() des WebView verwenden, wenn die Methode onPause() Ihrer Activity ausgeführt wird:

@override
public void onPause() {
        super.onPause();
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB){
          webview.onPause();
        }
}
  • funktioniert für API >= 11 (Honeycomb)
0
Elenasys

Der obige Ansatz hat für mich nicht funktioniert, einer, der für mich funktioniert hat:

@Override
protected void onPause() {
    super.onPause();
    ((AudioManager)getSystemService(
            Context.AUDIO_SERVICE)).requestAudioFocus(
                    new OnAudioFocusChangeListener() {
                        @Override
                        public void onAudioFocusChange(int focusChange) {}
                    }, AudioManager.STREAM_MUSIC, 
                    AudioManager.AUDIOFOCUS_GAIN_TRANSIENT);
}
0
sommesh

Ich habe alle oben genannten Antworten ausprobiert, aber die meisten funktionieren bei mir nicht. Also schreibe ich einfach meine eigene Lösung, die in allen Arten von Medien funktioniert, die in Webview abgespielt werden

 String lastUrl = "";
 @Override
    public void onPause() {
        super.onPause();
        lastUrl =  webView.getUrl();
        webView.loadUrl("");
    }

    @Override
    protected void onResume() {
        super.onResume();
        webView.loadUrl(lastUrl);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        webView = null;
    }
0
Abhiode

Dies hat letztendlich funktioniert, nachdem Sie jeden auf dieser Seite bereitgestellten Code ausprobiert haben. Uff!

@Override
protected void onPause() {
    super.onPause();
    if (mWebView != null) {
        mWebView.stopLoading();
        mWebView.reload();
    }
}

@Override
protected void onResume() {
    super.onResume();
}
0
Ramesh Seervi

In meiner Situation läuft der Player weiter, nachdem das WebView "onPause" ist. Ich überprüfe also, ob der WebView mit den Fenstern verbunden ist, bevor ich Videos oder Musik wiedergebe.

Es ist eine JavaScriptInterface-Methode zum Überprüfen der Rückgabe von "isAttachedToWindow ()" in WebView.

(Und ich habe nicht vergessen, onPause/onResume in Activity/Fragment aufzurufen.)

0
hsu.tw