Ton*_*ony 6 python android sl4a
我想知道一个简单问题的答案,但我找不到一个好的(我已经谷歌了几个小时:))
我正在玩带有python的sl4a,我可以将事件从js发送到python脚本,但是js没有捕获我在下面的代码中从python到js的eventPost.
任何人都知道这是如何完成的,或者如果没有registerCallback还有另一种方式?
HTML代码:
<html>
<head>
<script>
var droid = new Android();
function doit(){
droid.makeToast("Text send :=>"+document.getElementById("msg").value);
droid.eventPost("doit",document.getElementById("msg").value);
}
function alert_me(data){
droid.makeToast("All done!");
document.getElementById("msg").value = '';
}
droid.registerCallback("done",alert_me);
</script>
</head>
<body>
<input type="text" name="boton" id="msg" value="" />
<input type="button" name="boton" value="Go!" onclick="javascript:doit()" />
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
PYTHON代码:
import android,time
if __name__ == '__main__' :
droid = android.Android()
droid.webViewShow("file:///sdcard/sl4a/scripts/sample.html")
while True:
event = droid.eventWait().result
if event["name"] == 'doit':
droid.makeToast("Event catched! %s" % event['data'])
droid.eventPost("done","Done message")
time.sleep(2)
droid.exit()
Run Code Online (Sandbox Code Playgroud)
这很容易实现,但并不明显或没有很好的记录。
首先,您想要获得一个指向Androidwebview 内的对象的钩子。然后您可以使用它来注册一个或多个回调。举一个简单的例子,我们将只做一个弹出带有来自 Python 的消息的警报的示例。
var droid = new Android();
droid.registerCallback("echo", function(msg) {
alert(msg.data)
});
Run Code Online (Sandbox Code Playgroud)
在本例中,echo是您希望此回调处理的事件类型的名称。所以这将处理“回声事件”。事件名称是任意字符串,只要有意义就可以命名它们。
在启动 webview 的 Python 脚本中,您现在可以随时将事件发布到已注册的处理程序。
droid.eventPost("echo", "hello world")
Run Code Online (Sandbox Code Playgroud)
这里的第二个参数是您要传递给 JavaScript 回调的消息。
请注意,尽管您将消息作为字符串传回,但它还是作为对象到达 JavaScript 函数。我们在上面调用的该对象msg有一个名为 的属性,data其中包含您从 Python 端传递的字符串。
| 归档时间: |
|
| 查看次数: |
4210 次 |
| 最近记录: |