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>

相关推荐