java获取基站 phonegap 插件

参考

http://code.google.com/p/dogood/source/browse/trunk/annole_android/LiveWallpaper/src/fixedPosition/CellIDInfoManager.java?r=142

代码:

package fixedPosition;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.telephony.cdma.CdmaCellLocation;
import android.telephony.gsm.GsmCellLocation;
import android.util.Log;

//三大网络运营商的网络制式对应如下:
//
//移动2G 网   -->      GSM
//
//移动3G 网   -->      TD-SCDMA
//
//电信2G 网   -->      CDMA
//
//电信3G 网   -->      CDMA2000
//
//联通2G 网   -->      GSM
//
//联通3G 网   -->      WCDMA

//NETWORK_TYPE_UNKNOWN
//NETWORK_TYPE_GPRS
//NETWORK_TYPE_EDGE
//NETWORK_TYPE_UMTS
//NETWORK_TYPE_HSDPA
//NETWORK_TYPE_HSUPA
//NETWORK_TYPE_HSPA
//NETWORK_TYPE_CDMA
//NETWORK_TYPE_EVDO_0
//NETWORK_TYPE_EVDO_A
//NETWORK_TYPE_EVDO_B
//NETWORK_TYPE_1xRTT
//NETWORK_TYPE_IDEN
//NETWORK_TYPE_LTE
//NETWORK_TYPE_EHRPD

public class CellIDInfoManager {

	private final static String TAG = "CellIDInfoManager";
	private Context context;

	public CellIDInfoManager(Context context) {
		this.context=context;
	}
	/*
	 * 获取基站信息
	 */
	public ArrayList<CellIDInfo> getCellIDInfo() throws Exception{

		TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);

		ArrayList<CellIDInfo> CellID = new ArrayList<CellIDInfo>();
		CellIDInfo currentCell = new CellIDInfo();

		int type = manager.getNetworkType();
		Log.d(TAG, "getCellIDInfo--> 		NetworkType = " + type);
		int phoneType = manager.getPhoneType();
		Log.d(TAG, "getCellIDInfo--> 		phoneType = " + phoneType);

		if (type == TelephonyManager.NETWORK_TYPE_GPRS				// GSM网
				|| type == TelephonyManager.NETWORK_TYPE_EDGE
				|| type == TelephonyManager.NETWORK_TYPE_HSDPA)
		{
			GsmCellLocation gsm = ((GsmCellLocation) manager.getCellLocation());
			if (gsm == null)
			{
				Log.e(TAG, "GsmCellLocation is null!!!");
				return null;
			}

			int lac = gsm.getLac();
			String mcc = manager.getNetworkOperator().substring(0, 3);
			String mnc = manager.getNetworkOperator().substring(3, 5);
			int cid = gsm.getCid();

			currentCell.cellId = gsm.getCid();
			currentCell.mobileCountryCode = mcc;
			currentCell.mobileNetworkCode = mnc;
			currentCell.locationAreaCode = lac;

			currentCell.radioType = "gsm";

			CellID.add(currentCell);

//			// 获得邻近基站信息
			List<NeighboringCellInfo> list = manager.getNeighboringCellInfo();
			int size = list.size();
			for (int i = 0; i < size; i++) {

				CellIDInfo info = new CellIDInfo();
				info.cellId = list.get(i).getCid();
				info.mobileCountryCode = mcc;
				info.mobileNetworkCode = mnc;
				info.locationAreaCode = lac;

				CellID.add(info);
			}

		}else if (type == TelephonyManager.NETWORK_TYPE_CDMA		//// 电信cdma网
				|| type == TelephonyManager.NETWORK_TYPE_1xRTT
				|| type == TelephonyManager.NETWORK_TYPE_EVDO_0
				|| type == TelephonyManager.NETWORK_TYPE_EVDO_A)
		{

			CdmaCellLocation cdma = (CdmaCellLocation) manager.getCellLocation();	
			if (cdma == null)
			{
				Log.e(TAG, "CdmaCellLocation is null!!!");
				return null;
			}

			int lac = cdma.getNetworkId();
			String mcc = manager.getNetworkOperator().substring(0, 3);
			String mnc = String.valueOf(cdma.getSystemId());
			int cid = cdma.getBaseStationId();

			currentCell.cellId = cid;
			currentCell.mobileCountryCode = mcc;
			currentCell.mobileNetworkCode = mnc;
			currentCell.locationAreaCode = lac;

			currentCell.radioType = "cdma";

			CellID.add(currentCell);

//			// 获得邻近基站信息
			List<NeighboringCellInfo> list = manager.getNeighboringCellInfo();
			int size = list.size();
			for (int i = 0; i < size; i++) {

				CellIDInfo info = new CellIDInfo();
				info.cellId = list.get(i).getCid();
				info.mobileCountryCode = mcc;
				info.mobileNetworkCode = mnc;
				info.locationAreaCode = lac;

				CellID.add(info);
			}
		}

		return CellID;

	}

}

phonegap插件版本(只编写了获取邻近的基站)

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

import org.apache.cordova.api.CallbackContext;
import org.apache.cordova.api.Plugin;
import org.apache.cordova.api.PluginResult;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import com.example.hello.MainActivity;

import android.app.Notification;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.telephony.NeighboringCellInfo;
import android.telephony.TelephonyManager;
import android.telephony.gsm.GsmCellLocation;
import android.util.Log;

public class UnicomGSMCell extends Plugin {

	public static final String PLUGIN_NAME = "UnicomGSMCell";
	NotificationManager notificationManager;
	Notification note;
	PendingIntent contentIntent;

	public CallbackContext callbackContext;
	private static final String STOP_ACTION = "stop";
	private static final String GET_ACTION = "LocationInfo";
	public LocationClient locationClient = null;
	public JSONObject jsonObj = new JSONObject();
	public boolean result = false;

	private static final Map<Integer, String> ERROR_MESSAGE_MAP = new HashMap<Integer, String>();

	private static final String DEFAULT_ERROR_MESSAGE = "服务端定位失败";

	public String getErrorMessage(int locationType) {
		String result = ERROR_MESSAGE_MAP.get(locationType);
		if (result == null) {
			result = DEFAULT_ERROR_MESSAGE;
		}
		return result;
	}

	@Override
	public boolean execute(String action, JSONArray args,
			final CallbackContext callbackContext) throws JSONException {
		Log.d(PLUGIN_NAME, "Plugin execute called with action: " + action);

		setCallbackContext(callbackContext);
		if (GET_ACTION.equals(action)) {
			cordova.getActivity().runOnUiThread(new Runnable() {
				@Override
				public void run() {
					TelephonyManager manager = (TelephonyManager) cordova
							.getActivity().getSystemService(
									Context.TELEPHONY_SERVICE);

					String operator = manager.getNetworkOperator();
					/** 通过operator获取 MCC 和MNC */
					int mcc = Integer.parseInt(operator.substring(0, 3));
					int mnc = Integer.parseInt(operator.substring(3));

					// GsmCellLocation location = (GsmCellLocation)
					// manager.getCellLocation();

					/** 通过GsmCellLocation获取中国移动和联通 LAC 和cellID */
					// int lac = location.getLac();
					// int cellid = location.getCid();
					/** 通过CdmaCellLocation获取中国电信 LAC 和cellID */
					// <span style="white-space:pre"> </span>
					/*
					 * CdmaCellLocation location1 = (CdmaCellLocation)
					 * mTelephonyManager.getCellLocation(); <span
					 * style="white-space:pre"> </span> lac =
					 * location1.getNetworkId(); <span style="white-space:pre">
					 * </span> cellId = location1.getBaseStationId(); <span
					 * style="white-space:pre"> </span> cellId /= 16;
					 */

					int strength = 0;
					/** 通过getNeighboringCellInfo获取BSSS */
					List<NeighboringCellInfo> infoLists = manager
							.getNeighboringCellInfo();
					System.out.println("infoLists:" + infoLists + "     size:"
							+ infoLists.size());

					// List<NeighboringCellInfo> celllist = new
					// ArrayList<NeighboringCellInfo>();

					JSONArray jsonarray = new JSONArray();
					for (NeighboringCellInfo info : infoLists) {
						JSONObject jo = new JSONObject();
						try {
							jo.put("rssi", info.getRssi());
							jo.put("cellid", info.getCid());
							jo.put("lac", info.getLac());
						} catch (JSONException e) {
							// TODO Auto-generated catch block
							e.printStackTrace();
						}
						jsonarray.put(jo);
						// org.json.JSONObject jo =
						// JSONArray.toJSONObject(info);
						// celllist.add( JSONArray.fromObject(info));
						strength += (-133 + 2 * info.getRssi());// 获取邻区基站信号强度
						// info.getLac();// 取出当前邻区的LAC
						// info.getCid();// 取出当前邻区的CID
						System.out.println("rssi:" + info.getRssi()
								+ ";cellid:" + info.getCid() + ";lac:"
								+ info.getLac());
					}
					// JSONArray jsonarray = JSONArray.toJSONObject(infoLists);
					callbackContext.success(jsonarray.toString());
					result = true;
				}

			});
		} else if (STOP_ACTION.equals(action)) {
			locationClient.stop();
		}

		while (result == false) {
			try {
				Thread.sleep(100);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
		return true;
	}

	@Override
	public void onDestroy() {
		if (locationClient != null && locationClient.isStarted()) {
			locationClient.stop();
			locationClient = null;
		}
		super.onDestroy();
	}

	private void logMsg(String s) {
		System.out.println(s);
	}

	public CallbackContext getCallbackContext() {
		return callbackContext;
	}

	public void setCallbackContext(CallbackContext callbackContext) {
		this.callbackContext = callbackContext;
	}

	@SuppressWarnings("unused")
	@Override
	public PluginResult execute(String arg0, JSONArray arg1, String arg2) {
		// TODO Auto-generated method stub
		return null;
	}

}

index.html

<!DOCTYPE html>
<html class="ui-mobile">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>lbs测试</title>
<meta name="viewport"
	content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no">
<script type="text/javascript" charset="utf-8" src="jquery-1.7.1.min.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova.android.js"></script>
<script type="text/javascript">
	document.addEventListener("deviceready", appReady, false);
	function appReady() {
		getgsmcell();
	}
	function getlbs(){
		$('body').append('开始获取'+'<Br>');
		function onSuccess(pos) {
			$('body').append('成功结果:' + JSON.stringify(pos)+'<Br>');
		}
		function onFail(pos) {
			$('body').append('失败结果:' + JSON.stringify(pos)+'<Br>');
		}
		setTimeout(function(){
			cordova.exec(onSuccess, onFail, 'BaiduLocation', 'getCurrentPosition', []);
		},1000)
	}
	function getgsmcell(){
		$('body').append('开始获取'+'<Br>');
		function onSuccess(pos) {
			$('body').append('成功结果:' + JSON.stringify(pos)+'<Br>');
		}
		function onFail(pos) {
			$('body').append('失败结果:' + JSON.stringify(pos)+'<Br>');
		}
		setTimeout(function(){
			cordova.exec(onSuccess, onFail, 'UnicomGSMCell', 'LocationInfo', []);
		},1000)
	}
</script>
</head>
<body>
	<br>
	<h1 onclick="getlbs()">获取定位信息</h1>
	<br>
	<br>
	<h1 onclick="getgsmcell()">获取基站信息</h1>
	<br>
	测试页面
</body>
</html>

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注