Wie unterbreche ich Flash-Inhalte in einem Android WebView, wenn meine Aktivität nicht sichtbar ist?

Bin ich zu Experimentieren mit mit einem WebView anzeigen von Flash-Inhalten innerhalb meiner Tätigkeit. Alles funktioniert ziemlich gut, aber wenn der Nutzer die home-Taste, um die activity in den hintergrund, die Flash-Inhalt läuft (sound weiterläuft, etc)

Habe ich bemerkt, dass sowohl die stock-Android-browser und Dolphin Browser scheinen, um dieses problem zu vermeiden, und richtig pause die Flash-Inhalte, wenn Sie den browsing-Aktivität in den hintergrund.

Idealerweise würde ich gerne eine Lösung, die tötet, die WebView vollständig, wenn die Aktivität beendet, sondern pausiert, die es anders (im Grunde das kopieren der default-Verhalten der browser)

Hier ist ein einfacher test, den ich zusammen gestellt habe, lädt ein Spiel auf Kongregate, die einige hintergrund-Musik:

    public class BrowserTest extends Activity {
    private WebView mWebView;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);

            mWebView = new WebView(this);
            mWebView.getSettings().setJavaScriptEnabled(true);
            mWebView.getSettings().setPluginsEnabled(true);

            mWebView.loadUrl("http://m.kongregate.com/games/Jiggmin/the-game-of-disorientation-mobile");
            setContentView(mWebView);
        }

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

            mWebView.pauseTimers();
            if(isFinishing()){
                mWebView.loadUrl("about:blank");
                setContentView(new FrameLayout(this));
            }
        }

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

Nahm ich einen Blick auf die Letzte Quelle für den stock-browser, und es scheint etwas ähnliches (calling pauseTimers/resumeTimers), obwohl ich fürchte, der code, den ich gesucht haben, ist veraltet, weil es den Aufruf von Funktionen, die offenbar nicht mehr existieren.

Habe ich stellen Sie sicher, dass der Aufruf zu pauseTimers funktioniert durch das testen mit einem einfachen JavaScript setInterval, welche updates einen Zähler. Gibt es etwas anderes offensichtlich, dass ich versuchen sollte, in Bezug auf Window oder View-management?

In der Dokumentation für den mobilen Flash-player sagt:

Flash Player wird auch automatisch unterbrochen, SWF-Wiedergabe ist nicht in Sicht oder die Vordergrund-Anwendung, zum Beispiel, wenn ein Anruf eingeht oder ein alarm geht Los, zur Verringerung der CPU-Auslastung, Batterie-und Arbeitsspeicherauslastung.

Diese scheint zu funktionieren perfekt, sowohl in der stock-browser und Dolphin Browser, aber nicht in meiner app. Irgendwelche Ideen/Lösungen wäre sehr dankbar!

Update: Hier ist die Funktion beendet wir zusätzlich zu unserer Tätigkeit, um diese zu arbeiten. Wir nennen es mit "onPause" in der Aktivität onPause-Funktion und "onResume" in der Aktivität der onResume-Funktion:

private void callHiddenWebViewMethod(String name){
    if( mWebView != null ){
        try {
            Method method = WebView.class.getMethod(name);
            method.invoke(mWebView);
        } catch (NoSuchMethodException e) {
            Log.error("No such method: " + name, e);
        } catch (IllegalAccessException e) {
            Log.error("Illegal Access: " + name, e);
        } catch (InvocationTargetException e) {
            Log.error("Invocation Target Exception: " + name, e);
        }
    }
}

InformationsquelleAutor der Frage BenV | 2010-08-07

Schreibe einen Kommentar