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; } }