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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich nicht sehen, wo Sie sehen, dass
BrowserActivity
oder irgendetwas BerufungpauseTimers()
. Ich sehe, woonPause()
fürBrowserActivity
schließlich Strecken zuonPause()
vonWebView
. AllerdingsonPause()
vonWebView
hat die@hide
annotation und ist so nicht Teil des SDK. Aus dem Stegreif, es würde scheinen, onPause() ist, was Sie wollen, gegeben mit der Bemerkung:Hinweis: der Verweis auf "plugins", die nicht erwähnt wird in der
pauseTimers()
Dokumentation.Ich würde versuchen, mit der spiegelung, um zu sehen, wenn
onPause()
(und späteronResume()
wenn Sie wollen, Sachen zu starten wieder) tut, was Sie brauchen. Wenn es funktioniert, poste bitte ein Problem zu b.android.com über diese, Fragen Sie, um diese Methoden (oder äquivalente) auf das SDK. Ihre Voraussetzung, wie es scheint, wird ein gemeinsames, und eine Lösung, die geht vorbei das SDK ist keine gute Lösung.InformationsquelleAutor der Antwort CommonsWare
Dies ist, wie Sie es nennen in Ihrer Tätigkeit... Funktioniert wie ein Charme.
InformationsquelleAutor der Antwort Evan Leis