准备工作
开始之前确保以下软件都已经安装:
1. 新建android项目,加入FlashRuntimeExtensions.jar
2.创建java类:
SIMCardInfo.java
package com.yj.flash.extension.android; import android.content.Context; import android.telephony.TelephonyManager; /** * class name:SIMCardInfo<BR> * class description:读取Sim卡信息<BR> * PS: 必须在加入各种权限 <BR> * Date:2012-3-12<BR> * * @version 1.00 * @author CODYY)peijiangping */ public class SIMCardInfo { /** * TelephonyManager提供设备上获取通讯服务信息的入口。 应用程序可以使用这个类方法确定的电信服务商和国家 以及某些类型的用户访问信息。 * 应用程序也可以注册一个监听器到电话收状态的变化。不需要直接实例化这个类 * 使用Context.getSystemService(Context.TELEPHONY_SERVICE)来获取这个类的实例。 */ private TelephonyManager telephonyManager; /** * 国际移动用户识别码 */ private String IMSI; public SIMCardInfo(Context context) { telephonyManager = (TelephonyManager) context .getSystemService(Context.TELEPHONY_SERVICE); } /** * Role:获取当前设置的电话号码 <BR> * Date:2012-3-12 <BR> * * @author CODYY)peijiangping */ public String getNativePhoneNumber() { String NativePhoneNumber = null; NativePhoneNumber = telephonyManager.getLine1Number(); return NativePhoneNumber; } /** * Role:Telecom service providers获取手机服务商信息 <BR> * 需要加入权限<uses-permission * android:name="android.permission.READ_PHONE_STATE"/> <BR> * Date:2012-3-12 <BR> * * @author CODYY)peijiangping */ public String getProvidersName() { String ProvidersName = null; // 返回唯一的用户ID;就是这张卡的编号神马的 IMSI = telephonyManager.getSubscriberId(); // IMSI号前面3位460是国家,紧接着后面2位00 02是中国移动,01是中国联通,03是中国电信。 System.out.println(IMSI); if (IMSI.startsWith("46000") || IMSI.startsWith("46002")) { ProvidersName = "中国移动"; } else if (IMSI.startsWith("46001")) { ProvidersName = "中国联通"; } else if (IMSI.startsWith("46003")) { ProvidersName = "中国电信"; } return ProvidersName; } }
AS3Function.java
package com.yj.flash.extension.android; import com.adobe.fre.FREContext; import com.adobe.fre.FREFunction; import com.adobe.fre.FREObject; import android.content.Context; /** * class name:AS3Function<BR> * class description:在这里的call方法里面写调用java和android接口的代码<BR> * PS: <BR> * Date:2012-3-15<BR> * * @version 1.00 * @author CODYY)peijiangping */ public class AS3Function implements FREFunction { @Override public FREObject call(FREContext pContext, FREObject[] pParams) { try { Context context = pContext.getActivity();// 用来取得AIR程序中的Context对象 // Intent intent = new Intent(Intent.ACTION_VIEW); SIMCardInfo siminfo = new SIMCardInfo(context); // pParams为AIR传进来的参数组可以通过pParams[index].getXX()来获取; String ok = siminfo.getNativePhoneNumber() + pParams[0].getAsString() + siminfo.getProvidersName(); // String ok ="AAAAA"+pParams[0].getAsString(); // activity.startActivity(intent); return FREObject.newObject(ok);// 返回一个Object对象给AIR } catch (Exception e) { e.printStackTrace(); } return null; } }
AS3Extension.java
package com.yj.flash.extension.android; import com.adobe.fre.FREContext; import com.adobe.fre.FREExtension; /** * class name:AS3Extension<BR> * class description:接口类和AIR程序对接<BR> * PS: <BR> * Date:2012-3-15<BR> * * @version 1.00 * @author CODYY)peijiangping */ public class AS3Extension implements FREExtension { @Override public FREContext createContext(String arg0) { return new AS3Context(); } @Override public void dispose() { } @Override public void initialize() { } }
AS3Context.java
package com.yj.flash.extension.android; import java.util.HashMap; import java.util.Map; import com.adobe.fre.FREContext; import com.adobe.fre.FREFunction; /** * class name:AS3Context<BR> * class description:<BR> * PS: <BR> * Date:2012-3-13<BR> * * @version 1.00 * @author CODYY)peijiangping */ public class AS3Context extends FREContext { @Override public void dispose() { } @Override public Map<String, FREFunction> getFunctions() { // 暴露air里能调用的函数名,getPhoneNum在AIR中可以使用,对应的类是AS3Function HashMap<String, FREFunction> hashmap = new HashMap<String, FREFunction>(); hashmap.put("getPhoneNum", new AS3Function()); return hashmap; } }
以上是java代码,以下Flash端代码:
4.创建flex库项目
创建flex库项目时选上包括air库
5.创建as类
IntentNativeUtil.as:
package com.yj.flash.extension.android { import flash.events.EventDispatcher; import flash.events.StatusEvent; import flash.external.ExtensionContext; public class IntentNativeUtil extends EventDispatcher { private var context:ExtensionContext; public static const HELLO_WORLD_FUNCTION:String = "getPhoneNum";//与java端中Map里的key一致 public static const EXTENSION_ID:String = "com.yj.flash.extension.android";//与extension.xml中的id标签一致 private var extContext:ExtensionContext; public function IntentNativeUtil() { extContext = ExtensionContext.createExtensionContext(EXTENSION_ID,""); //第二个为参数,会传入java代码中的FREExtension的createContext方法 } public function getPhoneNum(name:String):String{ if(extContext){ return extContext.call(HELLO_WORLD_FUNCTION,name) as String; } return "failed"; } } }
6.打包ane
参考http://sswilliam.blog.163.com/blog/static/1896963832011910111931102/
需要注意的是打包命令应该是:
F:\ane>adt -package -storetype PKCS12 -keystore cert.p12 -storepass 123456 -targ
et ane com.yj.flash.extension.android.ane extension.xml -swc *.swc -platform And
roid-ARM -C Android-ARM .
命令最后加上 .