如何在不使用GPS的情况下以编程方式检测Android设备当前所在的国家/地区?

时间:2012-05-25 13:46:48

标签: java android

当我的应用运行时,我想检测当前位置的国家/地区名称并为该特定国家/地区名称执行一些操作,我可以使用地理编码器,gps轻松完成。但是我希望从Locale获得它,或者如果有更多可用的话。

3 个答案:

答案 0 :(得分:15)

使用此链接http://ip-api.com/json,这将以json的形式提供所有信息。从这个json你可以很容易地到达这个国家。此站点使用您当前的IP工作,它会自动检测IP和发送回复的详细信息。

文档http://ip-api.com/docs/api:json 希望它有所帮助。

这就是我得到的。

{
"as": "AS55410 C48 Okhla Industrial Estate, New Delhi-110020",
"city": "Kochi",
"country": "India",
"countryCode": "IN",
"isp": "Vodafone India",
"lat": 9.9667,
"lon": 76.2333,
"org": "Vodafone India",
"query": "123.63.81.162",
"region": "KL",
"regionName": "Kerala",
"status": "success",
"timezone": "Asia/Kolkata",
"zip": ""

}

答案 1 :(得分:4)

我不知道Android API是否允许您检查相关GSM网络的提供商代码。如果可能,您可以使用此代码检查,即根据此列表:http://www.techgsm.com/page/gsm-provider-codes/network-provider-identify-codes.html查找手机所在的国家/地区。

答案 2 :(得分:1)

您可以(并且应该)使用Android的国家/地区检测器服务。该服务由三个方法组成,所有方法都在.aidl中定义,这使您可以获取国家/地区代码,注册侦听器或删除它。具体来说,您需要第一个 - Country detectCountry();,它返回一个android.location.Country对象(AOSP中的frameworks / base / location / java / android / location / Country.java)。我假设你知道如何以编程方式调用方法(你需要getSystemService(“country_detector”))。

要从命令行进行测试,请尝试:

shell@flounder:/ $ service call country_detector 1
Result: Parcel(
  0x00000000: 00000000 00000001 00000002 00530055 '............U.S.'
  0x00000010: 00000000 00000003 1d809dda 00000000 '................')

对象序列化基本上只不过是2个字母的国家代码(这里是:US),源代码(这里是3,意味着这是从Locale中收集的),以及一个时间戳(1d809dda ...),它真的不是那很重要。您不必担心序列化,因为该对象是Parcelable。