gpt4 book ai didi

android - 使用 sl4a 将事件从 python 发送到 javascript

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:40:36 25 4
gpt4 key购买 nike

我想知道一个简单问题的答案,但找不到合适的答案(我用谷歌搜索了几个小时:))

任何人都知道这是如何完成的,或者如果没有 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>

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()

最佳答案

这很容易开始工作,但并不明显或没有很好的记录。

首先,您需要在 webview 中获取到 Android 对象的钩子(Hook)。然后你可以用它来注册一个或多个回调。举一个简单的例子,我们将只做一个弹出带有来自 Python 的消息的警报。

    var droid = new Android();

droid.registerCallback("echo", function(msg) {
alert(msg.data)
});

在这种情况下,echo 是您希望此回调处理的事件类型的名称。所以这将处理“回声事件”。事件名称是任意字符串,只要有意义就可以调用它们。

在启动 webview 的 Python 脚本中,您现在可以随时将事件发布到已注册的处理程序。

droid.eventPost("echo", "hello world")

此处的第二个参数是您要传递给 JavaScript 回调的消息。

请注意,虽然您将消息作为字符串传回,但它作为对象到达 JavaScript 函数。这个对象,我们在上面称它为 msg,有一个名为 data 的属性,其中包含您从 Python 端传递的字符串。

关于android - 使用 sl4a 将事件从 python 发送到 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7154669/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com