准备工作
开始之前确保以下软件都已经安装:
- Flash Builder 4.6
- Adobe AIR 3(Flahs builder中已经包含)
- Adobe Flex 4.6 (Flahs builder中已经包含)
- Java API for AS extensions(Flahs builder中已经包含 AIR 3 SDK,路径:${FB_HOME}\sdks\4.6.0\lib\android\lashRuntimeExtensions.jar)
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;
}
}
3.export jar包
以上是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 .
命令最后加上 .