AIR Native Extension的使用--AIR程序中获取手机SIM卡信息01

经过几天的努力,终于完成了这个复杂的操作过程,在Android中获取SIM卡中的电话号码和运营商信息,见我的博客http://blog.csdn.net/peijiangping1989/article/details/7344925

首先1.我们要在Android项目中写好获取SIM卡信息的代码,

四个类的代码如下:

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中可以使用,对应的类是TestAirNativeActivity
		HashMap<String, FREFunction> hashmap = new HashMap<String, FREFunction>();
		hashmap.put("getPhoneNum", new TestAirNativeActivity());
		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

转载于:https://my.oschina.net/chen106106/blog/49389

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值