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