android - 如何检索 CountryCode/ISO?

标签 android kotlin location in-app-purchase in-app-billing

我们的目的是在不向 Android 设备请求位置权限的情况下根据位置过滤内容,

为了满足这个要求,我们尝试了以下选项,但仍然不可靠

  1. 电话经理

如果没有 SIM 卡,它将无法工作,再次说明如果来自美国的用户现在到印度旅行,下面的 fragment 返回美国而不是印度

var telephonyManager = context?.getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val countryCodeValue = telephonyManager.networkCountryIso
  1. 语言环境

Locale 默认返回美国或英国,即使他们在印度,通常用户的 Locale 默认为英文

 Locale.getDefault().getCountry()
  1. 全局定位系统

我们不希望请求位置权限

  1. 从登录的 Google 帐户中检索国家/地区详细信息

来自 Google 的回复 - 他们没有任何专用 API 来检索用户的 countryCode 笔记: iOS 有一个专门的 API 可以告诉用户的 CountryCode,但 Android 没有

  1. 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/

相关文章:

android - 在 Kotlin 中设置 startActivity() 时类型不匹配

node.js - 如何从许多相似的名称中标准化城市名称

ios - 如何从应用程序内部找到安装了我的应用程序的手机? IOS 7

Android:通知在 Kit-Kat 上更新一定次数后停止更新

string - 每 n 个字符拆分字符串

android - emitAll 直到另一个操作完成?

android - 前台服务在 Android O 的打瞌睡模式下不接收位置更新

android - 为 Android 构建应用程序时任务 ':mergeF0F1F2F3DebugResources' 执行失败

javascript - 在 Parse 中使用 javaScript 发送推送通知

android - Android Studio 2020.3.1 (Canary 14) 中的 JDK 位置去哪儿了?