android 基站定位

來源:互聯網
上載者:User

         這裡給大家分享下基站定位的實現,基站定位首先要通過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;}}}

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.