马上注册 登录
中文乐高 返回首页

糖伯虎的个人空间 https://bbs.cmnxt.com/?1 [收藏] [复制] [分享] [RSS]

日志

android WIFI定位

热度 6已有 2373 次阅读2012-11-25 00:00 |个人分类:Java| 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; 
        } 
    } 


路过

雷人

握手

鲜花

鸡蛋

发表评论 评论 (6 个评论)

hidden
flicker 彩虹炫 | flicker 显身卡 | 本站网友2013-3-13 08:25
建议版主把论坛加一个富文本代码编辑器,这样的话代码就可以高亮显示了。阅读起来会方便很多
回复 夜冥 2014-5-10 23:25
你这样太麻烦了,googleearth可以直接导入
回复 gmail_cs 2014-12-4 11:00
你的意思是google提供WiFi定位的API吗?现在大陆封锁google,不知实际运用中网络畅通吗?
回复 孤毒醉酒 2015-11-25 16:07
gmail_cs: 你的意思是google提供WiFi定位的API吗?现在大陆封锁google,不知实际运用中网络畅通吗?
建议翻墙或者使用VPN

facelist

您需要登录后才可以评论 登录 | 马上注册

手机版|中文乐高 ( 桂ICP备13001575号-7 )

GMT+8, 2024-12-21 20:54 , Processed in 0.360058 second(s), 19 queries .

Powered by Discuz! X3.5

Copyright © 2001-2020, Tencent Cloud.

返回顶部