WIFI定位其实和基站定位都差不多,只需要把WIFI的MAC地址取到传给google就行了,下面是具体实现!
import java.io.Serializable;
import android.content.Context;
import android.net.wifi.WifiManager;
import android.util.Log;
/**
* @author yangzhiqiang
*
*/
public class WiFiInfoManager implements Serializable {
/**
*
*/
private static final long serialVersionUID = -4582739827003032383L;
private Context context;
public WiFiInfoManager(Context context) {
super();
this.context = context;
}
public WifiInfo getWifiInfo() {
WifiManager manager = (WifiManager) context
.getSystemService(Context.WIFI_SERVICE);
WifiInfo info = new WifiInfo();
info.mac = manager.getConnectionInfo().getBSSID();
Log.i("TAG", "WIFI MAC is:" + info.mac);
return info;
}
public class WifiInfo {
public String mac;
public WifiInfo() {
super();
}
}
}
上面是取到WIFI的mac地址的方法,下面是把地址发送给google服务器,代码如下:
public static Location getWIFILocation(WifiInfo wifi) {
if (wifi == null) {
Log.i("TAG", "wifi is null.");
return null;
}
DefaultHttpClient client = new DefaultHttpClient();
HttpPost post = new HttpPost("http://www.google.com/loc/json");
JSONObject holder = new JSONObject();
try {
holder.put("version", "1.1.0");
holder.put("host", "maps.google.com");
JSONObject data;
JSONArray array = new JSONArray();
if (wifi.mac != null && wifi.mac.trim().length() > 0) {
data = new JSONObject();
data.put("mac_address", wifi.mac);
data.put("signal_strength", 8);
data.put("age", 0);
array.put(data);
}
holder.put("wifi_towers", array);
Log.i("TAG", "request json:" + holder.toString());
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();
Log.i("TAG", "response json:" + sb.toString());
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;
}
}
分享到:
相关推荐
打开清单文件,查看使用WiFi定位的权限; 打开程序文件MainActivity,查看检测WiFi是否打开及开启WiFi的代码; 查看位置管理器方法requestLocationUpdates()中位置监听器的用法,并与GPSLocation工程中的位置器用法...
基于此,本课题重点研究并改进指纹定位算法,设计实现基于Android的WIFI室内定位系统。 首先,通过阅读大量相关的文献资料,对比分析了当前国内外WIFI室内指纹定位技术的研究现状对其中涉及到的相关技术的原理和特点...
Android WiFi LBS(Location-Based Services,基于位置的服务)定位是通过结合WiFi网络信号和移动通信基站信息来确定设备的位置。这种定位方式在GPS信号不可用或者信号弱的室内环境尤为实用。下面将详细介绍Android ...
【Android WiFi定位原理】 1. **WiFi信号强度与距离关系**:WiFi信号强度通常随距离增加而减弱,通过测量到不同AP的信号强度,可以推算出设备与各个AP的距离或相对距离。 2. **指纹定位法**:这是最常见的WiFi室内...
使用GPS和WIFI定位功能需要在AndroidManifest.xml中声明相应的权限: - `<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />`: 允许访问精细(GPS)位置信息。 - `<uses-permission ...
在Android系统中,基站和WIFI定位是两种重要的位置服务技术,它们可以帮助应用程序获取设备的地理位置信息,即使在没有GPS的情况下也能实现定位。对于OPhone和部分国产Android定制机,由于默认不支持基站和WIFI定位...
《基于位置指纹算法的Android平台WiFi定位系统》 在当今科技日新月异的时代,位置定位服务已经成为日常生活和工作中不可或缺的一部分。随着城市无线基础设施的快速发展,WiFi热点的覆盖率大幅度提升,这为WiFi定位...
在Android平台上,Google提供了一套全面的定位服务,使得开发者能够轻松实现基于GPS、Wi-Fi基站和移动网络的综合定位功能。这篇文档将详细介绍如何在Android应用中利用这些技术进行定位。 首先,我们需要理解...
本资源“androidgps基站与WIFI定位源码.zip”提供了一套实现GPS、基站和Wi-Fi定位功能的源代码,非常适合Android开发者学习和参考。 首先,我们要理解Android系统中的定位机制。Android提供了Location API,这是一...
最后,网络定位结合了GPS和WiFi定位,同时考虑移动网络基站信息,提高了定位效率和覆盖率。在网络条件良好时,网络定位可以快速提供粗略的位置信息,适合应用场景如推送基于位置的服务。然而,由于依赖网络,其隐私...
Android WIFI驱动工作流程是一个复杂的主题,包含了硬件与软件的协作以及网络通信的原理。首先,Android设备的WIFI功能通常是由内置硬件模块实现的,如Marvell 8686。在硬件层面,它集成了802.11a/g/b RF、基带、CPU...
Android的LocationManager同样支持WiFi定位,只需指定相应的PROVIDER即可。 基站定位,也称为Cell ID定位,是通过识别手机连接的移动通信基站来确定位置。当GPS信号弱或不可用时,这种方法可以提供粗略的位置信息。...
2. WIFI定位:WIFI定位利用已知的WIFI热点数据库,通过比较设备当前接收到的WIFI信号,匹配数据库中记录的信号特征来确定位置。在Android中,使用`WifiManager`类和`LocationManager`服务结合,通过`addWifiListener...
提供的"Android WIFI开发介绍.pdf"可能包含了对上述概念的详细讲解,可能涵盖如何解析WiFi扫描结果、处理连接事件、实现自定义的WiFi定位算法等内容。阅读源码可以帮助开发者更深入地理解Android WiFi系统的运作...
在Android系统中,GPS(全球定位系统)和WIFI基站定位是两种常见的定位技术,用于获取设备的地理位置信息。这份“androidGPS及WIFI基站定位坐标源码.zip”压缩包包含了一些实现这两种定位方式的源代码,对于学习...
WiFiLocation是一款基于K-NN算法的简易WiFi定位系统。它借助 LitePal 建立本地的WiFi指纹数据库,通过一系列API实现目标地点的WiFi指纹搜集、更新、重置或删除,以及当前位置的定位识别。
本文将详细介绍基于Android的三种定位方式:GPS(全球定位系统)、WiFi网络定位和基站定位,并结合提供的源码资源进行深入解析。 首先,GPS是全球卫星导航系统,用于提供精确的地理位置信息。`Android实现GPS定位....
注意,由于安全性原因,从Android 6.0(API级别23)开始,应用需要在运行时请求`ACCESS_FINE_LOCATION`或`ACCESS_COARSE_LOCATION`权限,因为扫描WiFi热点被认为是定位的一种形式。 在实际开发中,还需要考虑一些...
4. **定位服务**:除了WiFi定位,Android还提供了GPS、网络定位等多种定位服务。开发者需要理解如何开启和使用这些服务,并处理各种权限问题。 5. **数据处理和算法实现**:将收集到的WiFi信号强度转化为距离,然后...
在Android平台上,对WIFI状态的监控是移动应用开发中的一个重要功能,特别是在涉及网络连接、定位服务或数据传输的应用中。本文将详细讲解如何在Android中监控WIFI的状态,并介绍相关知识点。 首先,Android提供了`...