Android: 在不使用任何需要主动请求的权限的情况下获取用户国家代码的方法?

Android: way of getting the user's countrycode without using any permissions that need to be actively requested?

我想获取用户的国家代码而不使用任何需要在 android M 下主动请求的权限。例如,如果用户位于中国,我想取回 CH。我不想为此使用 "dangerous" 权限 - read_phone_state 既不会通过 TelephonyManager,也不会根据他的 GPS 来尝试猜测位置。有没有办法做到这一点,如果有,怎么做?

我试过使用下面的代码,但如果用户将他的语言设置与他的国家分开(例如,印度用户将他的 phone 设置为 English_US),它很容易失败:

Resources r = paramContext.getResources();
Configuration config = r.getConfiguration();
Locale currentLocale = config.locale;
Log.d("TAG", "Country: " + currentLocale.getCountry()); 

以编程方式确定用户物理位置的唯一方法需要 dangerous 权限。

如果您不想向用户询问权限,请向用户询问用户的位置。

I've tried using the following code

该代码与用户的物理位置无关。

所有允许以一定置信度确定用户当前位置的方法都被标记为危险。

也就是说,有几种方法不太可靠,但您可能可以接受:

  1. 语言环境:
    • 前提条件:语言环境可以映射到一个国家
    • 错误来源:用户在国外
    • 错误来源:用户是外国人
    • 错误来源:国家/地区的 l10n 质量不佳
  2. TelephonyManager.getSimCountryIso()
    • 前提条件:需要一张有效的SIM卡
    • 错误来源:用户在国外
    • 错误来源:用户从国外购买的SIM卡
  3. 正在通过 GeoIP 数据库查找位置
    • 先决条件:需要有效的互联网连接
    • 错误来源:数据库的 IP 地址映射错误
    • 错误来源:活动的 VPN 网络
  4. 询问用户他的国家
    • 前提条件:应用程序工作流允许用户输入
    • 错误来源:输入错误
    • 错误来源:信息已过时,因为用户未更新信息
    • 错误来源:用户恶意输入错误信息