发布于2019-09-05 14:26 阅读(1050) 评论(0) 点赞(17) 收藏(0)
SL4A r1 版本引入了内置的HTML编译器和控制WebView的api。
UiFacade模块也提供了一系列直接操作对话框和菜单的方法。想了解更多信息,请参考Ui Help部分的介绍。
API 中的webViewShow(url)方法是用来使用WebView打开给定URI对应的自定义HTML页面(当然也可以使用file://形式的URI)。WebView为他所有支持的语言提供基本一样的android类。
var droid = new Android();
不过与在其他语言中不同的是,Android类在WebView中提供了一个额外的方法 registerCallback():
droid.registerCallback("event_name", function(data) { alert(data); });
这个特定的回调函数会在指定名称的事件(event_name)抛出时被调用,例如:
<html>
<head>
<title>Sensor Monitor</title>
</head>
<body>
<div>X-Force: <div id="xforce" style="display: inline;" /></div>
<div>Y-Force: <div id="yforce" style="display: inline;" /></div>
<div>Z-Force: <div id="zforce" style="display: inline;" /></div>
<script>
var droid = new Android();
var display = function(data) {
document.getElementById("xforce").innerHTML = data.data.xforce;
document.getElementById("yforce").innerHTML = data.data.yforce;
document.getElementById("zforce").innerHTML = data.data.zforce;
}
droid.startSensing();
droid.registerCallback("sensors", display);
</script>
</body>
</html>
使用WebView并不需要使用另一种后台语言,HTML解释器使用执行Python脚本的方式执行HTML文件(就像上面的代码)。
如果想使用python语言调用WebView,可以通过事件来解决WebView和调用语言间的相互沟通问题。无论是python发出的事件或者WebView中js发出的事件,都可以被另一方接收处理。
让我们先来看一个用纯JS写的例子。
<html>
<head>
<title>Text to Speech</title>
<script>
var droid = new Android();
var speak = function() {
droid.ttsSpeak(document.getElementById("say").value);
}
</script>
</head>
<body>
<form onsubmit="speak(); return false;">
<label for="say">What would you like to say?</label>
<input type="text" id="say" />
<input type="submit" value="Speak" />
</form>
</body>
</html>
在文本框中输入文本并点击提交按钮,将会调用TTS API中的方法将文本框中内容读出来。将上面的代码保存到文件中,并命名为text_to_speech.html。现在我们使用python脚本调用WebView打开这个文件。python代码如下:
import android
droid = android.Android()
droid.webViewShow('file:///sdcard/sl4a/scripts/text_to_speech.html')
运行这个Python脚本将会在WebView中打开text_to_speech.html文件。当然,WebView会保持打开,就像之前一样工作。
现在我们修改HTML中的内容,使他可以出发一个事件,并在python中进行处理:
<html>
<head>
<title>Text to Speech</title>
<script>
var droid = new Android();
var speak = function() {
droid.postEvent("say", document.getElementById("say").value);
}
</script>
</head>
<body>
<form onsubmit="speak(); return false;">
<label for="say">What would you like to say?</label>
<input type="text" id="say" />
<input type="submit" value="Speak" />
</form>
</body>
</html>
我们也需要修改python中的部分代码,如下所示:
import android
droid = android.Android()
droid.webViewShow('file:///sdcard/sl4a/scripts/text_to_speech.html')
while True:
result = droid.waitForEvent('say').result
droid.ttsSpeak(result['data'])
这个代码片段演示了python脚本是如何等待并处理js脚本触发的“say”事件。当一个“say”事件到达时,python将会使用TTS API中的方法将随事件传递的数据读出来。
本文主要翻译自:http://code.google.com/p/android-scripting/wiki/UsingWebView
作者:皇后娘娘别惹我
链接:https://www.pythonheidong.com/blog/article/92313/1b0db637024b7d4c502a/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!
列表(0)
装饰器(0)
python(1)
python学习教程(0)
类(0)
pandas(0)
文件操作(0)
python小游戏源码下载(17)
web表白小程序(8)
多线程(0)
爬虫(0)
python表白小程序(2)
装饰器(0)
python(1)
面试题(2)
python学习教程(0)
类(0)
pandas(0)
文件操作(0)
python小游戏源码下载(17)
web表白小程序(8)
多线程(0)
爬虫(0)
python表白小程序(2)