尝试 Android Scripting Environment 之四

尝试 Android Scripting Environment 之四

作者: 宋立新

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

 

你可能感兴趣的:(java,android,service,Class,电话,scripting)