Android开发:通过Wifi获取经纬度
第一步:
//获取wifi管理对象
第二步:这一步比较耗时,最好写在线程中。
ok.到此就可以获取经纬度了。当然如果你所在的WIFI从来没有通过其他设备定位过,及google数据库中没有该wifi热点的位置信息,那就获取不到经纬度了。
WifiManagermainWifi=(WifiManager)getSystemService(Context.WIFI_SERVICE);
//判断wifi是否开启
if(mainWifi.isWifiEnabled())
{
//发送接入点的扫描请求,返回true成功。否则失败
mainWifi.startScan();
//启动一个线程执行第二步中的代码
}
publicLocationsetWeather()
{
BufferedReaderbr=null;
try
{
//接收请求结果,它会将所有链接wifi热点的链接信息返回
List<ScanResult>wifiList=mainWifi.getScanResults();
HttpPosthttpRequest=newHttpPost("http://www.google.com/loc/json");
//封装请求的参数
JSONObjectholder=newJSONObject();
JSONArrayarray=newJSONArray();
holder.put("version","1.1.0");
holder.put("host","maps.google.com");
holder.put("request_address",true);
for(inti=0;i<wifiList.size();i++)
{
//只取当前链接信息。通过mac地址进行匹配
//mac地址可以用macAddress=mainWifi.getConnectionInfo().getMacAddress();获得
if(wifiList.get(i).BSSID.equals(macAddress))
{
JSONObjectcurrent_data=newJSONObject();
current_data.put("mac_address",wifiList.get(i).BSSID);
current_data.put("ssid",wifiList.get(i).SSID);
current_data.put("signal_strength",wifiList.get(i).level);
array.put(current_data);
}
}
holder.put("wifi_towers",array);
StringEntityse=newStringEntity(holder.toString());
httpRequest.setEntity(se);
HttpResponseresp=newDefaultHttpClient().execute(httpRequest);
if(resp.getStatusLine().getStatusCode()==200)
{
HttpEntityentity=resp.getEntity();
br=newBufferedReader(newInputStreamReader(entity.getContent()));
StringBuffersb=newStringBuffer();
Stringresult=br.readLine();
while(result!=null)
{
sb.append(result);
result=br.readLine();
}
JSONObjectlocation=newJSONObject(sb.toString());
location=(JSONObject)location.get("location");
Locationloc=newLocation(LocationManager.NETWORK_PROVIDER);
loc.setLatitude((Double)location.get("latitude"));
loc.setLongitude((Double)location.get("longitude"));
returnloc;
}
returnnull;
}
catch(JSONExceptione)
{
Log.e(e.toString());
}
catch(ClientProtocolExceptione)
{
Log.e(e.toString());
}
catch(IOExceptione)
{
Log.e(e.toString());
}
catch(Exceptione)
{
Log.e(e.toString());
}
finally
{
if(null!=br)
{
try
{
br.close();
}
catch(IOExceptione)
{
Log.e(e.toString());
}
}
}
returnnull;
}
}
所需权限
<uses-permissionandroid:name="android.permission.INTERNET"></uses-permission>
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>