Как мне остановить Flash после выхода из WebView? - PullRequest
11 голосов
/ 01 июня 2011

У меня есть приложение, которое я собрал для потоковой передачи флэш-видео в веб-просмотр, когда пользователь нажимает кнопку.

Это нормально, но после отказа или потери фокуса похоже, что он продолжает использовать данные некоторое время, пока я не увижу, когда система выключит активность. Если я вручную убиваю из экрана активности, использование данных прекращается практически сразу. Просто отступаю, и это может продолжаться некоторое время.

Может кто-нибудь помочь мне с моим кодом, я был бы очень признателен!

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) {
        }
    }
}

}

Ответы [ 6 ]

13 голосов
/ 08 сентября 2011

Меня немного смущает вопрос, но я думаю, что вы говорите, что флеш-видео продолжает воспроизводиться даже после закрытия действия.Я столкнулся с аналогичной проблемой.Следующее работает для меня:

@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");
}

Я разместил это же решение здесь: Android WebView остановить Flash-плагин onPause

9 голосов
/ 16 сентября 2012

Этот подход работает у меня.Я звоню по нажатию кнопки назад.

webview.stopLoading(); 
webview.loadUrl("");
webview.reload();
webview = null;
4 голосов
/ 18 января 2012

Звонок webvew.destroy() в onDestroy() работал для меня.

2 голосов
/ 14 апреля 2014

Я объединил некоторые ответы здесь, и это сработало для меня:

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

    webView.stopLoading();
    webView.loadData("", "text/html", "utf-8");
    webView.destroy();
}
2 голосов
/ 19 февраля 2013

Если вам так же повезло, как и мне, даже этого будет недостаточно, чтобы прекратить трансляцию на YouTube!Звук все равно играет, несмотря ни на что!

@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;
}
1 голос
/ 04 ноября 2012

Подход к удалению webViwe у меня не сработал - он хорошо работал при первом закрытии веб-просмотра, но последующие вызовы веб-просмотра вызвали сбой.

Я закончил этим:

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

из метода моей активности finish ().

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...