在Android Kivy应用程序上保存当前URL

时间:2014-11-11 14:26:04

标签: android python python-2.7 webview kivy

我的代码:

import kivy                                                                                     
from kivy.app import App                                                                        
from kivy.lang import Builder                                                                   
from kivy.utils import platform                                                                 
from kivy.uix.widget import Widget                                                              
from kivy.clock import Clock                                                                    
from jnius import autoclass                                                                     
from android.runnable import run_on_ui_thread                                                   

WebView = autoclass('android.webkit.WebView')                                                   
WebViewClient = autoclass('android.webkit.WebViewClient')                                       
activity = autoclass('org.renpy.android.PythonActivity').mActivity
WebView = autoclass('android.webkit.WebView')                                                  
WebViewClient = autoclass('android.webkit.WebViewClient')                                      
activity = autoclass('org.renpy.android.PythonActivity').mActivity                              

class Wv(Widget):                                                                              
    def __init__(self, **kwargs):                                                            
        super(Wv, self).__init__(**kwargs)                                                      
        Clock.schedule_once(self.create_webview, 0)                                            

    @run_on_ui_thread                                                                          
    def create_webview(self, *args):                                                            
        webview = WebView(activity)                                                            
        webview.getSettings().setJavaScriptEnabled(True)                                        
        wvc = WebViewClient();                                                                  
        webview.setWebViewClient(wvc);                                                          
        activity.setContentView(webview)                                                        
        webview.loadUrl('www.google.com')

class ServiceApp(App):                                                                          
    def build(self):                                                                        
        return Wv()
    def on_pause(self):
        return True
    def on_resume(self):
        return Wv()

if __name__ == '__main__':                                                                      
    ServiceApp().run()

应用程序运行良好,但我想在on_pause事件触发时保存当前的URL然后 当on_resume事件我想要返回该URL时。

我没弄明白该怎么做。

建议?

1 个答案:

答案 0 :(得分:0)

编辑:我很好奇,继续检查事情。实际上我得到了一个java.lang.RuntimeException:由于在UI线程被阻塞时在错误的线程上调用了WebView API,因此检测到可能的死锁。 将WebViewClient子类化是必要的,我不知道如何在jnius中执行此操作。

我认为您可以毫无问题地访问您的网址。小部件树看起来像这样: ServiceApp - > WV 但是你没有让webview成为Wv的成员。你应该这样做:

@run_on_ui_thread
def create_webview(self, *args):
    self.webview = WebView(activity)
    self.webview.getSettings().setJavaScriptEnabled(True)
    wvc = WebViewClient();
    self.webview.setWebViewClient(wvc);
    activity.setContentView(self.webview)
    self.webview.loadUrl('www.google.com')

在此之后,我认为你可以做到:

class ServiceApp(App):
    def build(self):
        self.wv = Wv()
        return wv
    def on_pause(self):
        # do something with url, I don't know the android API that well
        # from http://developer.android.com/reference/android/webkit/WebView.html
        self.wv.webview.getUrl()
        return True
    def on_resume(self):
        # Here I have doubts why you create another widget but ok
        self.wv = Wv()
        return wv

我不确定有很多部分,需要进行测试以确保这样做是安全的,但这只是一个开始。我的2美分。