Ich experimentiere mit einem WebView, um Flash-Inhalte in meiner Aktivität anzuzeigen. Alles funktioniert ziemlich gut, aber wenn der Benutzer die Home-Taste gedrückt, um die Aktivität in den Hintergrund zu setzen, läuft der Flash-Inhalt weiter (Sound spielt weiter, usw.)Wie pausiere ich Flash-Inhalte in einem Android WebView, wenn meine Aktivität nicht sichtbar ist?
Ich habe festgestellt, dass sowohl die Aktie Android Browser und Dolphin Browser scheinen dieses Problem zu vermeiden und den Flash-Inhalt ordnungsgemäß anzuhalten, wenn die Browseraktivität in den Hintergrund gestellt wird.
Idealerweise würde ich eine Lösung gefällt, die die WebView tötet vollständig, wenn die Aktivität Finishing, sondern pausiert es sonst (im Grunde das Standardverhalten des Browsers kopieren)
Hier ist ein einfacher Test ich zusammen, dass ein lädt Spiel auf Kongregate, die Hintergrundmusik hat:
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();
}
}
ich für den Lager-Browser auf die neueste Quelle einen Blick nahm, und es scheint etwas ähnliches (Aufruf pauseTimers/resumeTimers) zu tun, auch wenn ich den Code, den ich fürchte, betrachtet haben, ist veraltet, weil es Funktionen aufruft, die scheinbar nicht existieren e.
Ich habe überprüft, dass der Aufruf von pauseTimers funktioniert, indem Sie mit einem einfachen JavaScript setInterval testen, die einen Zähler aktualisiert. Gibt es noch etwas anderes, das ich in Bezug auf Window- oder View-Management ausprobieren sollte?
Die Dokumentation für den mobilen Flash-Player sagt:
Flash Player SWF auch automatisch die Wiedergabe unterbrechen wird es nicht in Sicht oder die Vordergrundanwendung, zum Beispiel, wenn ein Anruf eingeht oder Alarm losgeht, zu Verringern Sie die CPU-Auslastung, den Akkuverbrauch und die Speichernutzung.
Dies scheint sowohl im Stock Browser und Dolphin Browser perfekt zu funktionieren, aber nicht in meiner App. Irgendwelche Ideen/Lösungen würden sehr geschätzt werden!
Update: Hier ist die Funktion, die wir zu unserer Aktivität hinzufügten, um dies zum Laufen zu bringen. Wir nennen es mit „onPause“ in der onPause Aktivität Funktion und „onResume“ in der onResume Funktion der Aktivität:
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);
}
}
}
Wie nennt man das? Hast du ein Code-Snippet der Nutzung? –
Keine Notwendigkeit, die Reflektion seit API Level 11 zu verwenden. Rufen Sie einfach die public onPause() und onResume() Methoden des WebView auf. – cprcrack