Pregunta ¿Cómo detengo Flash después de salir de un WebView?


Tengo una aplicación que preparé para transmitir video flash en una vista web cuando un usuario hace clic en un botón.

Lo hace bien, pero después de retroceder o perder el foco, parece que continúa usando datos por un tiempo hasta que asumo cuando el sistema cierra la actividad. Si elimino manualmente la pantalla de actividad, el uso de datos se detiene casi de inmediato. Simplemente retrocediendo y puede seguir por un tiempo.

¿Alguien puede ayudarme con mi código? ¡Realmente lo agradecería!

import java.lang.reflect.Method;
import android.app.Activity;
import android.os.Bundle;
import android.webkit.WebSettings;
import android.webkit.WebView;

public class Video extends Activity {


    private WebView webview;


    @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.video);


    webview = (WebView) findViewById(R.id.webview);

// resumeTimers() to account for the webview refcount bug (hopefully)
    webview.resumeTimers();
    WebSettings webSettings = webview.getSettings();
    webview.getSettings().setJavaScriptEnabled(true);
    webSettings.setPluginsEnabled(true);
    webview.setVerticalScrollBarEnabled (false);
    webview.setHorizontalScrollBarEnabled (false);

    webview.loadUrl("http://www.nasa.gov/multimedia/nasatv/nasatv_android_flash.html");
}


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

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



private void pauseBrowser() {

// pause flash and javascript etc
callHiddenWebViewMethod(webview, "onPause");
webview.pauseTimers();
}

private void resumeBrowser() {

// resume flash and javascript etc
callHiddenWebViewMethod(webview, "onResume");
webview.resumeTimers();
}

private void callHiddenWebViewMethod(final WebView wv, final String name){
    if( webview != null ){
        try {
            Method method = WebView.class.getMethod(name);
            method.invoke(webview);
        } catch (final Exception e) {
        }
    }
}

}

11
2018-06-01 13:06


origen


Respuestas:


Estoy un poco confundido por la pregunta, pero creo que estás diciendo que el video flash sigue jugando incluso después de que la actividad se cierra. Me encontré con un problema similar. Lo siguiente funcionó para mí:

@Override
protected void onDestroy() {
    super.onDestroy();
    final WebView webview = (WebView)findViewById(R.id.webPlayer);
    // Calling .clearView does not stop the flash player must load new data
    webview.loadData("", "text/html", "utf-8");
}

Publiqué esta misma solución aquí: android WebView stop Flash plugin onPause


13
2017-09-08 17:44



Este enfoque me funciona. Lo llamo al presionar el botón Atrás.

webview.stopLoading(); 
webview.loadUrl("");
webview.reload();
webview = null;

9
2017-09-16 18:18



Vocación webvew.destroy() en onDestroy() trabajó para mi.


4
2018-01-18 16:44



Si eres tan afortunado como yo, ¡incluso esto no será suficiente para terminar una transmisión en youtube! ¡El sonido sigue sonando sin importar qué!

@Override
protected void onDestroy() {
    super.onDestroy();

    // Stopping a webview and all of the background processes (flash,
    // javascript, etc) is a very big mess.
    // The following steps are to counter most of the issues seen on
    // internals still going on after the webview is destroyed.

    mWebView.stopLoading();
    mWebView.loadData("", "text/html", "utf-8");
    mWebView.reload();

    mWebView.setWebChromeClient(null);
    mWebView.setWebViewClient(null);

    RelativeLayout layout = (RelativeLayout) findViewById(R.id.webviewRelativeLayout);
    layout.removeView(mWebView);
    mWebView.removeAllViews();
    mWebView.clearHistory();
    mWebView.destroy();
    mWebView = null;
}

2
2018-02-19 16:49



Combiné algunas de las respuestas aquí, y esto funcionó para mí:

@Override
protected void onDestroy()
{
    super.onDestroy();

    webView.stopLoading();
    webView.loadData("", "text/html", "utf-8");
    webView.destroy();
}

2
2018-04-14 16:03



El enfoque de webViwe destory no funcionó para mí: funcionó bien en el primer cierre de la vista web, pero las llamadas posteriores a la vista web causaron un colapso.

Terminé haciendo esto:

_webView.loadData ("", "text / html", "utf-8");

de mi actividad finish () método.


1
2017-11-04 14:06