脚本语言(scripting language)是电脑程式语言,以简单的方式快速完成某些复杂的事情是脚本语言的重要原则,Android平台同样支持大部分脚本语言,我们可以通过ASE(android scriptingEnvironment)项目来完成使用脚本语言开发。
脚本可以访问多数的Android API,提供很多接口,通过接口我们可以完成以下功能:
- 操作 intents
- 启动 activitys
- 拨打电话
- 发送短信
- 扫描条形码
- 获取地理位置和传感器数据
- 使用 Text-To-Speech
等一系列操作。脚本可以在终端中交互地执行,或者作为后台service启动,也可以通过locale命令启动。但是脚本可以很方面的完成特殊操作,但是复杂的应用还是需要通过java实现,脚本语言知识android的一些插件,简化很多工作,为应用程序服务。
ASE是一个开源项目,我们可以在Google code上下载它的安装包,网址:
http://code.google.com/p/android-scripting/,可以选择下载安装包还是ASE的源码,下载下来的apk文件可以直接安装。安装完成后,点击应用图标启动ASE,此时启动之后是一片空白,我们需要按“Menu”键添加脚本环境和终端以及解释器等操作。
安装解释器:点击“Menu”,选择“Interpreter”,选择添加的脚本语言解释器,可以选择Lua,或者python等。当选择脚本解释器后,程序会自动从网站上下载并安装。
如何新建新的脚本程序:点击“Menu”,选择“Add Script”。然后弹出界面选择添加的脚本程序种类,然后写入脚本程序的名字及内容,选择“Save”或者“Save And Run”。
ASE是如何调用Android的API的?
ASE通过两种方式来访问API:
- JSON-RPC 如Python及Lua这样的本地应用
- 运行beanshell这个基于JVM的语言
对于beanshell这样的脚本语言,可以直接访问android的java API,处于简化的目的,ASE提供了AndroidFacade类,对于像Python这样的语言,API是通过使用JSON RPC调用在代理商暴露出来的。这意味着只有被AndroidFacade和AndroidProxy封装的那部分API才能被Python的交叉编译解释器使用,不过AndroidFacade和AndroidProxy都很容易扩展。AndroidFacade和AndroidProxy的源代码位于“com\google\ase”下。
下面共享两个脚本语言。
实现功能:当手机正面向下放置的时候禁用铃声。(Lua脚本)
require "android"
--开启传感器
android.startSensing()
android.sleep(1)
silent=false
while true do
--获得传感器信息
s=android.readSensors()
--取得传感器信息后判断是否正面朝下
facedown=s.resoult.zfroce and s.resoult.zforce>9
--如果正面朝下
if facedown and not silent then
android.vibrate()
--设置铃声静音模式
android.setRingerSilent(true)
silent=true
--如果正面朝上
elseif not facedown and silent then
android.setRingerSilent(false)
silent=false
end
android.sleep(1)
end
如何用Python语言实现一个简易的聊天程序
import android,xmpp
"""设置服务器、端口"""
_SERVER='talk.google.com',5233
class SayChat(object):
def_init_(self):
self.droid=android.Android()
"""取得输入的用户名和密码"""
username=self.droid.getInput('Username')['result']
password=self.droid.getInput('Password')['result']
jid=xmpp.protocol.JID(username)
self.client=xmpp.Client(jid.getDomain().debug=[])
"""连接服务器"""
self.client.connect(server=_SERVER)
"""注册回调"""
self.client.RegisterHandler('message',self.message_cb)
if not self.client:
"""连接失败"""
print 'Connection failed!'
return
auth=self.client.auth(jid.getNode(),password,'botty')
if not auth:
print 'Authentication failed!'
return
self.client.sendInitPresence()
def message_cb(self,session,message):
jid=xmpp.protocol.JID(message.getForm())
username=jid.getNode()
text=message.getBode()
"""通过TTS来实现语音对话"""
self.droid.speak('%s say %s' %(username,text))
def.run(self):
try:
while True:
self.client.Process(1)
except KeyboardInterrupt:
pass
saychat = SayChat()
saychat.run()