android - 如何检索 CountryCode / ISO?
问题描述
我们的目的是在不向 Android 设备请求位置权限的情况下根据位置过滤内容,
为了满足这个要求,我们尝试了以下选项,但仍然不可靠
- 电话经理
如果没有 SIM 卡,它将无法工作,再次说明如果来自美国的用户现在到印度旅行,下面的片段返回美国而不是印度
var telephonyManager = context?.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val countryCodeValue = telephonyManager.networkCountryIso
- 语言环境
语言环境默认返回美国或英国,即使他们在印度,通常用户的语言环境默认为英语
Locale.getDefault().getCountry()
- 全球定位系统
我们不希望请求位置权限
- 从登录的 Google 帐户中检索国家/地区详细信息
来自 Google 的回复 - 他们没有任何专用 API 来检索用户的 countryCode 注意:iOS 有一个专用 API 可以告诉用户的 CountryCode,但 Android 没有
- IP地址
我们尝试获取安卓设备的IP(来自几个IP融合网站),有以下两种情况
- 用户连接到 WiFi - 我们能够获取 countryCode (WIFI IP : 64.134.234.17)
- 用户连接到移动数据 - 即使我们在美国,我们也得到了错误的国家代码,它说 IP 来自日本(移动网络 IP:210.253.218.106)
注意: 即使 Netflix 在发布期间确定国家/地区,也无需请求位置权限
解决方案
我认为您只有两种可能性...或请求许可...或未经许可,您必须要求用户插入地址(也只有城市)并通过Google 地理编码服务检索国家/地区代码
推荐阅读
- python - 如何准确知道正在调用哪个函数/方法/对象?
- unity3d - 如何在 Unity 中处理大量重图像资源
- asp.net-core - 使用 Azure AD 登录进行集成测试
- java - 在服务验证请求的 GET 响应中返回附加参数或用户属性
- rust - 在 x86 macOS 上交叉编译到 i686
- spring - 使用spring cloud gateway HOXTON.SR5停止和启动服务后看不到服务
- office-addins - Office 加载项:自定义选项卡不会在桌面 PP/Excel 中显示,在 365 中可以正常工作
- javascript - 尝试使用 AWS.STS.getSessionToken 和 node.js 无法检索令牌
- python - Scrapy Item Pipelines 和文件命名
- javascript - nginx 1.19.0:上传文件时出现 415 错误