如何通过脚本开发Android

       脚本语言(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:

  1. JSON-RPC       如Python及Lua这样的本地应用
  2. 运行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()
posted @ 2011-11-14 23:06  Neilyo  阅读(1007)  评论(0编辑  收藏  举报