android中 WIFI定位

  WIFI定位其实和基站定位都差不多,只需要把WIFI的MAC地址取到传给google就行了,下面是具体实现!

[java]
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服务器,代码如下:

[java] 
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; 
        } 
    } 
 

随着人们对基于位置的服务(Location Based Service,LBS)需求日益增大,以及无线通信技术的快速发展,无线定位技术成为了一个研究热点。人们在室外广泛使用目前较成熟的GPS,A-GPS等定位系统进行定位,但是在复杂的室内环境,这些技术的定位精度不高,不能满足室内定位的需求。WIFI网络具有通信快速、部署方便的特点,它在室内场所广受欢迎.Android系统从几年前发布以来在智能手机操作系统市场占有率不断升高,成为目前使用最为广泛的智能手机操作系统,同时Android移动终端自身具备WIFI无线连接功能。指纹定位算法以其独特的优势减小了对室内难以精确定义的信号传播模型的依赖性,成为定位技术的一个研究热点。基于此,本课题重点研究并改进指纹定位算法,设计实现基于AndroidWIFI室内定位系统。 首先,通过阅读大量相关的文献资料,对比分析了当前国内外WIFI室内指纹定位技术的研究现状对其涉及到的相关技术的原理和特点进行介绍分析,包括WIF1无线通信技术,室内无线定位技术以及位置指纹定位技术,并根据室内WIFI指纹定位技术的特征对定位过程的影响因素进行分析。 其次,根据前面提到的定位过程的关键影响因素,介绍了对应的解决方案。分析与研究了几种典型的指纹定位算法,包括最近邻法(NN).K近邻法(KNN)、K加权近邻法(WKNN),并提出算法的改进方案,使用MATLAB软件进行算法的仿真分析,寻求其的最佳参数值以及定位性能差异。通过分析几种算法的性能仿真结果,拟定了基于最强AP法的改进算法作为定位系统采纳的算法。 然后,通过对基于AndroidWIFI室内定位系统的需求分析,提出了一种基于Android 的WIF1室内定位系统设计方案。接着介绍了定位系统软件开发环境,并设计了定位系统总体架构,以及定位系统的各个功能模块。在各项设计确定以后,采用JAVA语言编程实现定位系统的各项功能。 最后,搭建了WIFI室内定位实验环境,使用完成的室内定位系统结合硬件资源,在实验环境下,进行离线阶段创建数据库以及在线阶段的定位测试,并记录呈现在定位客户端上定位结果,分析对应的定位性能.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值