【问题标题】:How to programmatically detect in which country the android device is located currently without using GPS?如何在不使用 GPS 的情况下以编程方式检测 android 设备当前位于哪个国家/地区?
【发布时间】:2012-05-25 13:46:47
【问题描述】:

当我的应用程序运行时,我想检测当前位置的国家名称并为该特定国家名称做一些事情,我可以使用地理编码器、gps 轻松完成。但我想从 Locale 获取它,或者如果有更多可用的东西。

【问题讨论】:

  • “做一些事情”具体是什么事情?
  • 我想做一个货币转换器,所以我需要检测应用程序的启动位置并设置该国家的默认货币
  • 您可以在没有 GPS 的情况下使用 Google 定位服务 API 吗?还是您也想避免这种情况?
  • 其实我想避免任何使用互联网连接的东西,有没有使用时区之类的方法?
  • 时区不理想。如果您只使用 UTC 偏移量,您只会知道大概的经度,但这根本无济于事。时区名称可能更准确,但即便如此,也有太多国家共享时区。你永远无法确定你得到的是正确的。

标签: java android


【解决方案1】:

使用此链接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": ""

}

【讨论】:

  • 但它有局限性。他们的系统会自动禁止任何每分钟请求超过 150 个的 IP 地址。
【解决方案2】:

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

【讨论】:

  • +1 这太棒了……我从来没有想过。提供者代码也称为 MCC。在 SO 上的其他地方发现了一个可能有帮助的问题:stackoverflow.com/q/890366/250725 ...虽然,可能无法在飞行模式下工作。
【解决方案3】:

您可以(并且应该)使用 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。

【讨论】:

    猜你喜欢
    • 2020-12-25
    • 1970-01-01
    • 2012-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多