感谢:
http://www.devdiv.com/home.php?mod=space&uid=23856&do=blog&id=3684
前言:
GPS定位能提供精确, 详细的数据。但是有的时候我们不能通过GPS获得数据,如在屋子里面,无GPS功能等情况。那我们就需要其他的定位手段,基站定位是一个不错的选择。
当我们手机开机时,手机会自动向信号最强的无线通讯台联系,注册信息,这个通讯台就是我们所说的基站,每个基站都有自己的id,我们通过这个基站的id能够找到基站的位置,而国内城市的基站密度可以达到500米以下或者更低,所以能够大体上确定我们的位置。
准备工具:
1. TelephonyManager: 主要提供了一系列用于访问与手机通讯相关的状态和信息的get方法。其中包括手机SIM的状态和信息、电信网络的状态及手机用户的信息。在这里我们就是通过这个类获得基站信息。
2. GsmCellLocation:装载着从TelephonyManager中获得的信息。
3. JSONObject,JSONArray:组建json相关的类。
4. 联网相关的类。
代码:
1.获得UI组件
mTextView = (TextView) findViewById(R.id.textview);
mButton = (Button) findViewById(R.id.button);
2.获得基站信息
mTManager = (TelephonyManager) this
.getSystemService(Context.TELEPHONY_SERVICE);
GsmCellLocation gcl = (GsmCellLocation) mTManager.getCellLocation();
int cid = gcl.getCid();
int lac = gcl.getLac();
int mcc = Integer.valueOf(mTManager.getNetworkOperator().substring(0,
3));
int mnc = Integer.valueOf(mTManager.getNetworkOperator().substring(3,
5));
String getNumber = "";
getNumber += ("cid:"+cid + "\n");
getNumber += ("cid:"+lac + "\n");
getNumber += ("cid:"+mcc + "\n");
getNumber += ("cid:"+mnc + "\n");
3.创建json
try {
JSONObject jObject = new JSONObject();
jObject.put("version", "1.1.0");
jObject.put("host", "maps.google.com");
jObject.put("request_address", true);
if (mcc == 460) {
jObject.put("address_language", "zh_CN");
} else {
jObject.put("address_language", "en_US");
}
JSONArray jArray = new JSONArray();
JSONObject jData = new JSONObject();
jData.put("cell_id", cid);
jData.put("location_area_code", lac);
jData.put("mobile_country_code", mcc);
jData.put("mobile_network_code", mnc);
jArray.put(jData);
jObject.put("cell_towers", jArray);
4. 创建连接,发送请求并接受回应
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost(
"http://www.google.com/loc/json");
StringEntity se = new StringEntity(jObject.toString());
post.setEntity(se);
HttpResponse resp = client.execute(post);
BufferedReader br = null;
if (resp.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
br = new BufferedReader(
new InputStreamReader(resp.getEntity().getContent()));
StringBuffer sb = new StringBuffer();
}
5. 获得数据 参见json Server Response
StringBuffer sb = new StringBuffer();
String result = br.readLine();
while (result != null) {
sb.append(getNumber);
sb.append(result);
result = br.readLine();
}
mTextView.setText(sb.toString());
权限:
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
<uses-permission android:name="android.permission.INTERNET"></uses-permission>
分享到:
相关推荐
总之,Android基站定位是移动设备定位的一种重要方式,尽管存在精度限制,但结合其他技术,如A-GPS和Wi-Fi定位,可以为用户提供较好的位置服务。在开发过程中,理解并合理运用这些技术,同时注意用户隐私保护,是...
在描述中提到,这个特定的Android基站定位程序目前只支持中国联通和中国移动的网络。这是因为这两个运营商在国内拥有广泛的基站覆盖,数据较为完善,便于进行定位计算。而中国电信由于其网络架构和频段的不同,可能...
本节将深入探讨Android基站定位的概念、实现原理以及如何在实际应用中使用。 首先,基站定位的基本原理是利用手机与多个基站之间的信号强度或时间差来确定手机的位置。每个基站都有一个独特的识别码,当手机连接到...
在Android开发中,基站定位是一种常见的获取用户地理位置的方法,它主要依赖于移动设备与周围基站之间的信号强度来确定位置。这种技术尤其适用于GPS信号不佳或者无法接收到GPS信号的环境,如室内。在这个名为...
下面将详细探讨Android基站定位的基本原理、实现方法以及可能涉及的关键技术。 **基站定位原理** 基站定位是通过测量手机与多个基站之间的信号强度和到达时间差(Time Difference of Arrival, TDOA)来计算设备位置...
以下是关于“android基站定位代码”及相关标签的详细知识点: 1. **基站定位原理**: - 移动设备会接收到周围多个基站发射的信号,每个基站都有其唯一的识别码(Cell ID)和位置区域码(LAC)。 - 设备计算与每个...
总之,这个“android基站定位源代码”是一个学习和理解Android基站定位技术的好资源,它可以帮助开发者深入理解移动定位的原理,并在此基础上进行定制和优化,以满足特定应用的需求。通过研究和实践,你可以进一步...
本压缩包"Android基站定位源码.zip"包含了实现这一功能的源代码,下面我们将深入探讨其背后的原理和技术实现。 基站定位的基本原理是利用手机接收到的多个基站的信号,通过三角测量法计算出手机的位置。每个基站...
本篇将深入探讨Android基站定位的源码实现,包括基本原理、关键步骤以及涉及到的相关API。 基站定位主要依赖于移动网络中的Cell ID(小区ID)和LAC(Location Area Code,位置区代码)。每个基站都有一个唯一的Cell...
下面将详细探讨Android基站定位的原理、实现方法以及源码解析。 一、基站定位原理 基站定位主要依赖于三角测量法。手机会接收到周围多个基站发射的无线电信号,每个基站都会有一个已知的地理位置。通过计算手机到...
下面将详细阐述Android基站定位的相关知识点。 一、基站定位原理 基站定位的基本思想是利用手机接收到来自多个基站的无线电信号,通过计算信号到达时间差(Time Difference of Arrival, TDOA)或信号强度(Received...