android 基站定位

来源:互联网 发布:微信文章广告植入源码 编辑:程序博客网 时间:2024/06/11 18:48

         这里给大家分享下基站定位的实现,基站定位首先要通过TelephonyManager得到手机的信号信息,比如基站的国家编码,小区id等......得到这些后需要向google提供的接口提交这些参数,然后就会返回基站的相关信息。

废话不多说直接上代码吧:

import java.io.Serializable;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;/** * @author yangzhiqiang *  */public class CellIdInfoManager implements Serializable {/** *  */private static final long serialVersionUID = 5481154371450408380L;private Context context;public CellIdInfoManager(Context context) {super();this.context = context;}public List<CellInfo> getCellInfo() {List<CellInfo> listInfo = new ArrayList<CellInfo>();int countryCode;int networkCode;int areaCode;CellInfo info = new CellInfo();GsmCellLocation gsm = null;TelephonyManager manager = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);if (manager.getPhoneType() == TelephonyManager.PHONE_TYPE_GSM) {gsm = (GsmCellLocation) manager.getCellLocation();if (gsm == null) {return null;}if (manager.getNetworkOperator() == null|| manager.getNetworkOperator().length() == 0) {return null;}countryCode = Integer.parseInt(manager.getNetworkOperator().substring(0, 3));networkCode = Integer.parseInt(manager.getNetworkOperator().substring(3, 5));areaCode = gsm.getLac();info.cellId = gsm.getCid();info.mobileCountryCode = countryCode;info.mobileNetworkCode = networkCode;info.locationAreaCode = areaCode;info.radio_type = "gsm";listInfo.add(info);List<NeighboringCellInfo> list = manager.getNeighboringCellInfo();for (NeighboringCellInfo i : list) {CellInfo ci = new CellInfo();ci.cellId = i.getCid();ci.mobileCountryCode = countryCode;ci.mobileNetworkCode = networkCode;ci.locationAreaCode = areaCode;ci.radio_type = "gsm";listInfo.add(ci);}} else if (manager.getPhoneType() == TelephonyManager.PHONE_TYPE_CDMA) {CdmaCellLocation cdma = (CdmaCellLocation) manager.getCellLocation();if (cdma == null) {return null;}if (manager.getNetworkOperator() == null|| manager.getNetworkOperator().length() == 0) {return null;}Log.v("TAG", "CDMA");info.cellId = cdma.getBaseStationId();info.mobileCountryCode = Integer.parseInt(manager.getNetworkOperator());info.mobileNetworkCode = cdma.getSystemId();info.locationAreaCode = cdma.getNetworkId();info.radio_type = "cdma";listInfo.add(info);}return listInfo;}public class CellInfo {// 基站编号public int cellId;// 国家代码public int mobileCountryCode;// 网络代码public int mobileNetworkCode;// 区域代码public int locationAreaCode;public String radio_type;public CellInfo() {super();}}}

上面是得到手机信号的信息,下面是将这些信息发送到google服务器并解析结果:

import java.io.BufferedReader;import java.io.InputStreamReader;import java.io.Serializable;import java.util.List;import org.apache.http.HttpEntity;import org.apache.http.HttpResponse;import org.apache.http.HttpStatus;import org.apache.http.client.methods.HttpPost;import org.apache.http.entity.StringEntity;import org.apache.http.impl.client.DefaultHttpClient;import org.json.JSONArray;import org.json.JSONObject;import android.location.Location;import android.util.Log;import com.metarnet.gps.CellIdInfoManager.CellInfo;/** * @author Administrator *  */public class NetworkLocationManager implements Serializable {/** *  */private static final long serialVersionUID = 1185788569820321281L;public static Location getBaseStationLocation(List<CellInfo> cellID) {if (cellID == null) {Log.i("TAG", "cellId is null.");return null;}DefaultHttpClient client = new DefaultHttpClient();HttpPost post = new HttpPost("http://www.google.com/loc/json");JSONObject holder = new JSONObject();try {CellInfo info = cellID.get(0);holder.put("version", "1.1.0");holder.put("host", "maps.google.com");holder.put("home_mobile_country_code", info.mobileCountryCode);holder.put("home_mobile_network_code", info.mobileNetworkCode);holder.put("request_address", true);holder.put("radio_type", info.radio_type);if ("460".equals(info.mobileCountryCode)) {holder.put("address_language", "zh_CN");} else {holder.put("address_language", "en_US");}JSONObject data, current_data;JSONArray array = new JSONArray();current_data = new JSONObject();current_data.put("cell_id", info.cellId);current_data.put("location_area_code", info.locationAreaCode);current_data.put("mobile_country_code", info.mobileCountryCode);current_data.put("mobile_network_code", info.mobileNetworkCode);current_data.put("age", 0);array.put(current_data);if (cellID.size() > 2) {for (int i = 1; i < cellID.size(); i++) {data = new JSONObject();data.put("cell_id", info.cellId);data.put("location_area_code", info.locationAreaCode);data.put("mobile_country_code", info.mobileCountryCode);data.put("mobile_network_code", info.mobileNetworkCode);data.put("age", 0);array.put(data);}}holder.put("cell_towers", array);StringEntity se = new StringEntity(holder.toString());post.setEntity(se);HttpResponse resp = client.execute(post);int state = resp.getStatusLine().getStatusCode();if (state == HttpStatus.SC_OK) {HttpEntity entity = resp.getEntity();if (entity != null) {BufferedReader br = new BufferedReader(new InputStreamReader(entity.getContent()));StringBuffer sb = new StringBuffer();String resute = "";while ((resute = br.readLine()) != null) {sb.append(resute);}br.close();data = new JSONObject(sb.toString());data = (JSONObject) data.get("location");Location loc = new Location(android.location.LocationManager.NETWORK_PROVIDER);loc.setLatitude((Double) data.get("latitude"));loc.setLongitude((Double) data.get("longitude"));loc.setAccuracy(Float.parseFloat(data.get("accuracy").toString()));loc.setTime(System.currentTimeMillis());return loc;} else {return null;}} else {Log.v("TAG", state + "");return null;}} catch (Exception e) {Log.e("TAG", e.getMessage());return null;}}}



 

原创粉丝点击