我们的目的是在不向 Android 设备请求位置权限的情况下根据位置过滤内容,
为了满足这个要求,我们尝试了以下选项,但仍然不可靠
- 电话经理
如果没有 SIM 卡,它将无法工作,再次说明如果来自美国的用户现在到印度旅行,下面的 fragment 返回美国而不是印度
var telephonyManager = context?.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val countryCodeValue = telephonyManager.networkCountryIso
- 语言环境
Locale 默认返回美国或英国,即使他们在印度,通常用户的 Locale 默认为英文
Locale.getDefault().getCountry()
- 全局定位系统
我们不希望请求位置权限
- 从登录的 Google 帐户中检索国家/地区详细信息
来自 Google 的回复 - 他们没有任何专用 API 来检索用户的 countryCode 笔记: iOS 有一个专门的 API 可以告诉用户的 CountryCode,但 Android 没有
- IP 地址
我们尝试获取Android设备的IP(从几个IP融合网站),有以下两种情况
- 用户连接到 WiFi - 我们能够获取 countryCode(WIFI IP : 64.134.234.17)
- 用户连接到移动数据 - 我们得到了错误的国家代码 即使我们在美国,它说IP来自日本(移动网络 IP:210.253.218.106)
注意: 甚至 Netflix 在发布期间也确定了国家/地区,而无需请求位置许可
最佳答案
我认为您只有两种可能...或请求许可...或未经许可您必须要求用户插入地址(也只有城市)并通过 Google Geocoding Service 检索国家代码
关于android - 如何检索 CountryCode/ISO?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50852443/