参考
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>