如何确定 Android 设备当前所在国家的位置,无论用户设置如何?

8
我需要确定设备所在的国家(iso3),即使用户的设备关闭了GPS并且不允许应用程序访问其位置。我还需要考虑没有SIM卡的平板电脑,因此无法使用telephonyManager。
出于这个原因,我认为我不能使用位置管理器(也因为以下原因:LocationManager requestLocationUpdates doesn't work
我的想法是使用简单的HTTP请求到第三方IP位置API:
例如: http://www.ipinfodb.com/ip_location_api.phphttps://freegeoip.net 这是最好的方法吗?最好的开放式API是什么?

请注意VPN和企业网络。某个企业网络导致我在印度时被定位到台湾。如果您的应用程序弹出对话框说“抱歉,不支持台湾”,而您的用户已获得在印度使用您的应用程序的许可,则会让他们感到恼火。 - Kartick Vaddadi
2个回答

9

那个服务似乎运行良好,但这是什么服务?关于该服务的规则没有任何信息。 - JohnRock
根据我的研究和经验,目前没有。 - Shadik Khan
我会将这标记为正确,因为尽管我没有使用以上提到的服务,但我决定使用我们构建的自定义 API 端点来回答这个问题,而不是依赖设备。 - JohnRock

4
您可以使用TelephonyManager。
TelephonyManager tm = (TelephonyManager)this.getSystemService(this.TELEPHONY_SERVICE);
String countryCode = tm.getNetworkCountryIso();

更新: 由于您无法使用电话功能,我建议尝试这种方法,因为它会获取用户在设置设备时的输入。

String locale = context.getResources().getConfiguration().locale.getCountry();

没有SIM卡的平板电脑将没有TelephonyManager,因此我不能依赖它。我已经更新了我的问题以包括这一点。谢谢。 - JohnRock
这是一个有趣的想法。我还没有尝试过,但它是否可以被欺骗?我不能依赖于用户可以随意设置的东西。 - JohnRock
我不确定,可以问一下你会用这个做什么吗? - Tristan Wiley
该应用程序有许可要求,只允许在部分国家的子集中使用某些功能。因此,我们需要确切知道用户在使用应用程序时所在的国家。 - JohnRock
好的,你可以使用TelephonyManager和/或getCountry(),如果其中之一不起作用或为空,你可以通过使用外部库检查IP地址的位置。 - Tristan Wiley

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接