如何在android中通过ip获取地理位置?

如何在android中通过ip获取地理位置?,android,geolocation,ip,Android,Geolocation,Ip,有人知道是否存在使用公共IP获取android设备的估计地理位置(纬度、经度)的API吗 现在我可以通过以下方法获得IP地址: private void getIPAddress(){ URL url; BufferedReader bufferedReader=null; InputStreamReader in=null; HttpURLConnection urlConnection = null; try { url = new U

有人知道是否存在使用公共IP获取android设备的估计地理位置(纬度、经度)的API吗

现在我可以通过以下方法获得IP地址:

private void getIPAddress(){
    URL url;
    BufferedReader bufferedReader=null;
    InputStreamReader in=null;
    HttpURLConnection urlConnection = null;
    try {
        url = new URL("http://ip2country.sourceforge.net/ip2c.php?format=JSON");
        urlConnection = (HttpURLConnection) url.openConnection();
        urlConnection.setRequestMethod("GET");
        urlConnection.connect();
        in = new InputStreamReader(urlConnection.getInputStream());
        bufferedReader = new BufferedReader(in);
        String line;
        StringBuffer buffer = new StringBuffer(); 
        while((line = bufferedReader.readLine()) != null) {
              buffer.append(line);
              buffer.append('\r');
        }
        bufferedReader.close();
        in.close();
        JSONObject json_data = new JSONObject(buffer.toString());
        ip = json_data.getString("ip");
    } catch (Exception e) {
        e.printStackTrace();
    } 
    finally{
         try {
            bufferedReader.close();
            in.close();
        } catch (IOException e) {}

        if(urlConnection != null) {
            urlConnection.disconnect(); 
          }
    }
}

感谢避免调用外部web服务。另一种方法是查询LocationManager.NETWORK\u提供程序

String provider = LocationManager.NETWORK_PROVIDER;
Location lastKnownLocation = locationManager.getLastKnownLocation(provider);

您可以使用Web服务请求您的ip位置。API以XML格式返回IP地址(国家、地区、城市、zipcode、纬度、经度)的位置和相关时区。

您可以使用此链接()获取以下所有信息。提供的ip是您连接到的外部ip地址

JSON格式:(但您可以选择您的格式)

{
  "ip": "xx.xxx.xxx.xx",
  "country_code": "US",
  "country_name": "United States",
  "region_code": "XX",
  "region_name": "XXX XXXX",
  "city": "XXX XXXX",
  "zip_code": "10XXX",
  "time_zone": "America/New_York",
  "latitude": 4X.XXXX,
  "longitude": -7X.XXXX,
  "metro_code": 501
}