A闪的 BLOG 技术与人文
不知道有多少人使用Egret的原生打包功能。大家如果遇到问题可以到Egret社区去提问,bbs.egret-labs.org
使用原生打包可以假如一些系统功能,我们可以称之为native扩展。通过这种方式,你可以调用陀螺仪,定位服务以及震动摄像头等等。这篇文章中抛砖引玉,教大家如何去打包原生应用并且调用系统的震动功能。
我们先创建一个Egret项目,为了演示功能,我也不做特别的功能,在舞台上绘制一个红色的正方形,当用户点击后,可以触发震动事件,让手机不停的震动。
关键代码如下:
var shp:egret.Shape = new egret.Shape(); shp.graphics.beginFill(0xff0000); shp.graphics.drawRect(0,0,100,100); shp.graphics.endFill(); this.addChild(shp); shp.touchEnabled = true; shp.addEventListener(egret.TouchEvent.TOUCH_BEGIN,this.clicks,this);其中最关键的代码就是调用egret.ExternalInterface.call这个函数,通过它,我们可以呼叫native层的响应代码。值得注意的是,”zd” 是我们定义的指令,标识震动,你可以任意命名,而第二个参数没有任何意义,它本来是让我们在调用native功能时传递的参数,但由于这个实例中不涉及任何传参问题,所以我们随便传入一个参数即可。private clicks(evt:egret.TouchEvent):void { egret.ExternalInterface.call("zd","s"); }
使用一个egret create_app 命令创建一个android项目后,我们需要自己创建一个类。具体代码如下:
package org.egret.java.androidd;需要注意的一点是,函数call是必须要实现的,用于执行我们的响应的代码,而setActivity函数是我自己编写的。由于调用震动功能需要使用到Activity这个类的实例对象,所以由外界传值进行应用。import android.os.Vibrator; import android.content.Context; import android.app.Activity; import org.egret.java.externalInterface.IExternalInterface;
public class EgretZhendong implements IExternalInterface {
@Override public void call(String arg0) { Vibrator vibrator = (Vibrator)act.getSystemService(Context.VIBRATOR_SERVICE); long [] pattern = {100,400,100,400}; // 停止 开启 停止 开启 vibrator.vibrate(pattern,2); } private Activity act; public void setActivity(Activity value) { act = value; }
}
然后你要做的是在你的Java代码的入口类当中,我这里是org.egret.java.android.androidd.java。这个名称会根据你的项目名称而决定。很容易找到,你在android工程中的src中就可以找到它。
在这个类中的onCreate方法中最后面编写你的代码。
ExternalInterface.getInstance().run(); EgretZhendong edz = new EgretZhendong(); edz.setActivity(this); ExternalInterface.getInstance().addCallBack("zd", edz);即使你没有编写过Java代码,你也可以看明白这段代码是什么意思,无非就是创建我们刚才所定义的EgretZhendong类,然后通过ExternalInterface.getInstance().addCallBack(“zd”, edz);来绑定我们调用的口令和指定响应功能的对象而已。
完成了这部分功能后,我们来接上手机,直接测试一下。如果你的代码完全正确。那么你可以看到一个默认的Hello World界面,点击左上角的红色方块,手机开始不停的震动。
如果你在调试的时候发现android项目报错,请在AndroidManifest.xml中增加下面这行配置,调用震动需要获取系统权限。
<uses-permission android:name="android.permission.VIBRATE" />OK!这篇简单的教程就介绍到这里,如果你还不太会使用,或者实际照做中遇到一些问题,可以下载我提供的附件连接。查看其中的项目代码细节。