在 Android Kivy 应用程序上保存当前 URL
Posted
技术标签:
【中文标题】在 Android Kivy 应用程序上保存当前 URL【英文标题】:Saving current URL on Android Kivy Application 【发布时间】:2015-01-08 03:12:20 【问题描述】:我的代码:
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。
我不知道该怎么做。
建议?
【问题讨论】:
我想您是在询问如何在 on_pause 事件期间以线程安全的方式访问 Webview,因为它在 ui 线程中运行。在 java 中,WebView.WebViewTransport 类用于通过设置目标处理程序对象将 webview 传递给其他线程。 codota.com/android/scenarios/518913a0da0a50347f673d4f/… 我对适用于 Android 的 Python 了解得不够多,无法说明这种方法是否可行,但向邮件列表询问可能是个好主意.... 使用 Java 时,有一种方法可以获取您所在的当前 url。你在这里为 WebView 使用什么 python 模块? 我现在在我的帖子中包含了导入 【参考方案1】:编辑:我很好奇,然后继续检查。事实上,我得到一个 java.lang.RuntimeException: Probable deadlock detected due to WebView API was called on wrong thread while UI thread is blocked。 有必要对 WebViewClient 进行子类化,我不确定如何在 jnius 中执行此操作。
我认为您可以毫无问题地访问您的网址。小部件树如下所示: 服务应用程序-> 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 美分。
【讨论】:
以上是关于在 Android Kivy 应用程序上保存当前 URL的主要内容,如果未能解决你的问题,请参考以下文章
Python/Kivy/Buildozer - 应用程序在 Android 中崩溃,但在 PC 上运行良好