2012-12-31 144 views
13

我正在开发Android应用程序确定的Android设备的位置。我想确定使用其IP地址的设备的位置。我从哪说起呢? Google API上的链接不够明确。谢谢。如何使用IP地址

回答

5

您应该使用再利用IP获取位置休耕API。

Ip2Location API

+0

可悲的是,经过这些年来,没有什么在这个链接工程 – SREE

2

,有几项网络服务,为您提供纬度和IP地址的经度值。

的一个例子是api.ipinfodb.com

为前,您可以通过发送请求像

http://api.ipinfodb.com/v3/ip-city/?key=<your_api_key> 
       &ip=74.125.45.100&format=json 

经纬度这个返回JSON格式的数据,你可以得到响应XML设置格式= XML。(你需要注册,以获取您的API密钥)。

,或者你可以从thisthis链接下载数据库。

你可以下载数据集,但你必须不断更新。

+0

我已经尝试获取该网站的API密钥,但未成功。它不断请求我的位置,即使我提供了它。您是否愿意分享您的密钥? –

3

结帐Google Maps Geolocation API

样品POST:

https://www.googleapis.com/geolocation/v1/geolocate?key=YOUR_API_KEY 

示例响应:

{ 
    "location": { 
    "lat": 51.0, 
    "lng": -0.1 
    }, 
    "accuracy": 1200.4 
} 

限制:

01标准API的个

用户:每天每秒 10查询

2500个免费查询,每个用户 启用薪酬为你去结算解锁更高的配额:

$ 0.50美元/ 1000其他查询,每天高达100,000。

MORE

0

您可以使用freegeoip.net

这是一个免费的开源服务。您可以直接使用该服务或您的个人服务器上运行它。它也可以很容易地部署到Heroku。

要获取IP位置,只需使用OkHttp发送HTTP/HTTPS请求:

String url = "https://freegeoip.net/json/" 
Request mRequest = new Request.Builder() 
     .url(url) 
     .build(); 
Context mContext // A UI context 
new OkHttpClient().newCall(mRequest).enqueue(new Callback() { 
    Handler mainHandler = new Handler(mContext.getApplicationContext().getMainLooper()); 

    @Override 
    public void onResponse(Call call, Response response) { 
     String responseBody = null; 
     try { 
      responseBody = response.body().string(); 
     } catch (final IOException e) { 
      mainHandler.post(new Runnable() { 
       @Override 
       public void run() { 
        // handle error 
       } 
      }); 
     } 

     final String finalResponseBody = responseBody; 
     mainHandler.post(new Runnable() { 
      @Override 
      public void run() { 
       // handle response body 
       try { 
        JSONObject locationObject = new JSONObject(finalResponseBody); 
       } catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    @Override 
    public void onFailure(Call call, final IOException e) { 
     mainHandler.post(new Runnable() { 
      @Override 
      public void run() { 
       mNetworkListener.onNetworkError(e.getMessage()); 
      } 
     }); 
    } 
}); 

和响应看起来就像是这样的:

{ 
    "ip": "192.30.253.113", 
    "country_code": "US", 
    "country_name": "United States", 
    "region_code": "CA", 
    "region_name": "California", 
    "city": "San Francisco", 
    "zip_code": "94107", 
    "time_zone": "America/Los_Angeles", 
    "latitude": 37.7697, 
    "longitude": -122.3933, 
    "metro_code": 807 
}