作者: 宋立新
Email:[email protected]
随着学习的深入,我们准备去修改一下源码,扩充其API 以满足我们自己的个性化要求!比如,能够拨打一个电话,并返回该电话是否成功,是对方忙还是网络信号不好等等。
按照 ASE 的 WiKi 上的文档,基本就可以了。几个注意点:
1) ASE 需要使用 Java1.6
2) AndroidScriptingEnvironmentTest 需要造一个 res 目录,才能编译通过。
考虑到代码的干净性,我们决定添加一个项目,在其中添加我们自己开发的 API 函数.
TextToSpeechFacade 比较简单,我们就模仿它了。
cp –a TextToSpeechFacade DragonCustomFacade
然后搜索一下需要修改的地方:
$ find . | xargs grep TextToSpeechFacade
./AndroidScriptingEnvironment/src/com/google/ase/facade/FacadeConfiguration.java: list.addAll(MethodDescriptor.collectFrom(TextToSpeechFacade.class));
./AndroidScriptingEnvironment/src/com/google/ase/facade/FacadeConfiguration.java: receivers.add(new TextToSpeechFacade(service));
./AndroidScriptingEnvironment/.classpath: <classpathentry combineaccessrules="false" kind="src" path="/TextToSpeechFacade"/>
./DragonCustomFacade/src/com/google/ase/facade/TextToSpeechFacade.java:public class TextToSpeechFacade implements RpcReceiver {
./DragonCustomFacade/src/com/google/ase/facade/TextToSpeechFacade.java: public TextToSpeechFacade(Service service) {
./DragonCustomFacade/.project: <name>TextToSpeechFacade</name>
这样, 我们需要修改的地方有:
Ø AndroidScriptingEnvironment/src/com/google/ase/facade/FacadeConfiguration.java
中的两处,这里是把一个 Façade类挂接到系统中以及初始化该类。所以我们需要把我们的DragonCustomFacade相应代码加入,注意初始化函数有几种形式,按需。
Ø ./AndroidScriptingEnvironment/.classpath
这里是定义依赖关系,简单模仿。
Ø ./DragonCustomFacade/src/com/google/ase/facade/TextToSpeechFacade.java
将该Java 文件改为DragonCustomFacade.java, 并修改其中的内容。 作为示例,我们只是现实一个Toast对话框。后续,我们可以按需扩充其中的功能。
package com.google.ase.facade;
import android.app.Service;
import android.widget.Toast;
import com.google.ase.jsonrpc.RpcReceiver;
import com.google.ase.rpc.Rpc;
import com.google.ase.rpc.RpcParameter;
import android.os.Handler;
public class DragonCustomFacade implements RpcReceiver {
private final Handler mHandler = new Handler();
private final Service mService;
public DragonCustomFacade(Service service) {
mService = service;
}
@Override
public void shutdown() {
}
@Rpc(description = "Displays a short-duration Toast notification.")
public void DragonMakeToast(@RpcParameter(name = "message") final String message) {
mHandler.post(new Runnable() {
public void run() {
Toast.makeText(mService, message, Toast.LENGTH_SHORT).show();
}
});
}
}
编译,运行,并用python脚本调用我们的函数:
$ cat t2.py
import android
droid = android.Android()
droid.DragonMakeToast('Hello, Dragon!')
运行之,发现可以打印出 Hello, Dragon!
1. 编译 ASE
http://code.google.com/p/android-scripting/wiki/CompilingASE