AIR Native Extension的使用--AIR程序中获取手机SIM卡信息01
经过几天的努力,终于完成了这个复杂的操作过程,在Android中获取SIM卡中的电话号码和运营商信息,见我的博客http://blog.csdn.net/peijiangping1989/article/details/7344925 首先1.我们要在Android项目中写好获取SIM卡信息的代码, 需要先导入AIR安装目录下的bin目录下android目录下的FlashRuntimeExtensions.jar文件到Android项目中。在项目下建立lib文件夹,把jar拷到该文件夹下,右键jar包build path-add to build path即可。
四个类的代码如下:AS3COntext.java
- package com.pei.air;
-
- 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;
- }
- }
复制代码 AS3Extension.java- package com.pei.air;
-
- 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() {
-
- }
-
- }
复制代码 SIMCardInfo.java- package com.pei.air;
-
- 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.pei.air;
-
- 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;
- }
-
- }
复制代码 2.右键点击com.pei.air包,选择Export导出jar文件
选择下一步,如图:
把jar包保存到桌面这样就得到了一个air3.jar文件。3.打开FB,新建一个Flex库项目,记得勾住Adobe AIR库,如图,我们取名叫TestKu
4.在库项目中新建包和类如下:
IntentNativeUtil.as代码- package com.codyy.ppmeet.util
- {
- 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.pei.air";//与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";
- }
- }
- }
复制代码 extension.xml
- <?xml version="1.0" encoding="UTF-8"?>
- <extension xmlns="http://ns.adobe.com/air/extension/3.1">
- <id>com.pei.air</id>
- <versionNumber>1</versionNumber>
- <platforms>
- <platform name="Android-ARM">
- <applicationDeployment>
- <nativeLibrary>air3.jar</nativeLibrary>
- <initializer>com.pei.air.AS3Extension</initializer>
- <finalizer>com.pei.air.AS3Extension</finalizer>
- </applicationDeployment>
- </platform>
- </platforms>
- </extension>
复制代码 写好代码以后,我们保存,刷新项目,然后把bin目录下的TestKu.swc文件拷出来,可以新建一个文件夹把前面的air3,jar和这个TestKu.swc放一起。5.然后在你的Flex手机项目中的libs目录下,把TestKu.swc拷进去,这样就成功的把库引入了你的项目中了,跟java导入jar性质一样,我们可以项目中编写一个如下的界面,- <?xml version="1.0" encoding="utf-8"?>
- <s:View xmlns:fx="http://ns.adobe.com/mxml/2009"
- xmlns:s="library://ns.adobe.com/flex/spark"
- creationComplete="init(event)" title="主页视图">
-
- <fx:Script>
- <![CDATA[
- import com.codyy.ppmeet.util.IntentNativeUtil;
-
- import mx.events.FlexEvent;
- private var PhoneNum:String;
- private var helloExt:IntentNativeUtil;
- protected function button1_clickHandler(event:MouseEvent):void
- {
- PhoneNum=helloExt.getPhoneNum(input01.text);
- label01.text=PhoneNum;
- }
- protected function init(event:FlexEvent):void
- {
- // TODO Auto-generated method stub
- helloExt = new IntentNativeUtil();//创建extension
-
- }
- ]]>
- </fx:Script>
-
- <fx:Declarations>
- <!-- 将非可视元素(例如服务、值对象)放在此处 -->
- </fx:Declarations>
- <s:Button x="173" y="179" width="127" label="按钮" click="button1_clickHandler(event)"/>
- <s:Label id="label01" x="65" y="45" width="375" height="42" text="标签"/>
- <s:TextInput id="input01" x="122" y="117" width="237" height="42"/>
- </s:View>
复制代码 当然你也可以在类文件中使用只需调用IntentNativeUtil的getPhoneNum方法就可以。这样所有的事情都已经解决。所有的代码都已经写好了,当然你不可以直接运行程序,因为目前AIR还不支持引用了Native Extension的打包。请看下篇博客如何进行使用了Native Extension的AIR项目的打包。
本文来自:http://blog.csdn.net/peijiangping1989/article/details/7356950
|