Java 如何获得用户首选的单元?(公制(米)或英制(英里))?

Java 如何获得用户首选的单元?(公制(米)或英制(英里))?,java,android,eclipse,units-of-measurement,metric,Java,Android,Eclipse,Units Of Measurement,Metric,我想知道用户喜欢的英里和米之间的单位是什么。似乎“Locale”类不允许这样做 虽然无法使用区域设置获取首选单位,但默认情况下,如果区域设置表示美国或缅甸(Locale.getISO3Country().equalsIgnoreCase(“usa”)|| Locale.getISO3Country().equalsIgnoreCase(“mmr”)),则可以假定首选单位为英制,否则首选单位为公制。在任何情况下,如果单位可以英制或公制形式显示,则显示的测量系统应为用户可设置的首选系统 在某些国家,

我想知道用户喜欢的英里和米之间的单位是什么。似乎“Locale”类不允许这样做

虽然无法使用区域设置获取首选单位,但默认情况下,如果区域设置表示美国或缅甸(
Locale.getISO3Country().equalsIgnoreCase(“usa”)|| Locale.getISO3Country().equalsIgnoreCase(“mmr”)
),则可以假定首选单位为英制,否则首选单位为公制。在任何情况下,如果单位可以英制或公制形式显示,则显示的测量系统应为用户可设置的首选系统

在某些国家,单位存在某些特殊性。(另请参见撰写本文时公认的答案。)例如,尽管英国首选的日常单位是公制单位,但也有一些例外,尤其是-

  • 在地面运输中,每小时英里数
  • 风速为每小时英里
  • 品脱和加仑,用于牛奶和啤酒(但不是大多数其他食品和饮料);及
  • 石头,或石头和磅,相当于一个人的体重

由于美国以外的一些人可能已将语言设置为英语(美国),因此最终最好采用
getSimCountryIso()
的返回值,而不是
getISO3Country()

如果
countryCode
us
则SIM卡为美制,因此英制单位可能是更好的选择-在任何其他情况下,均采用公制

  • 构建一个
    Locale:Country:Metric

  • 您可以使用
    Locale.getDefault()
    为正在运行的设备的用户获取适当的区域设置

  • 对生成的表执行搜索


  • 结果是你的

    我不认为所有地区都有正确的公制/英制问题的答案

    例如,在英国,我们通常用英里来表示长途旅行,比如汽车旅行,用英尺和英寸来表示人的身高,但也可以用米来表示房间的尺寸

    我们几乎总是用升来测量液体体积,除了啤酒,有时牛奶仍然可以以品脱出售

    公斤通常比磅和盎司更受欢迎,但大多数食谱都会列出这两种,因为有些人仍然有使用磅和盎司的秤


    我想你必须做一些研究,找出哪些国家使用哪种尺度来衡量你感兴趣的东西(当然,给用户手动选择一种或另一种的选项)。

    英国不也使用帝国制吗?@KevinDTimm:在某些情况下(例如在酒精饮料等方面),但肯定没有达到与美国相同的程度。因此,这只是一个默认的假设。IIRC,它们将距离(在道路上)测量为英里-如果使用此解决方案,更好的代码是:
    mLocale.getISO3Country().equalsIgnoreCase(Locale.US.getISO3Country())
    几乎正确。因为只有美国和缅甸没有采用公制。因此,只需检查语言代码
    xx_-US
    xx_-MY
    (the),并仅对这两种语言使用英制。这是错误的。你们是在建议基于可选组件的解决方案,这只是半生不熟的投票。我认为最好先检查一下是否有SIM卡,然后再检查它是否失败,然后使用locale。我完全同意,我的手机设置为美国,虽然我不是那里的人,我使用公制…但当我去另一个国家旅行并使用他们的sim卡时,我不想要他们的测量单位,我想要我的谢谢分享。你认为英国或美国的“普通汽车驾驶员”是否能够立即将公里/小时转换为英里(又称驾驶时)?
    TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
    String countryCode = tm.getSimCountryIso();