Java 如何获得用户首选的单元?(公制(米)或英制(英里))?
我想知道用户喜欢的英里和米之间的单位是什么。似乎“Locale”类不允许这样做 虽然无法使用区域设置获取首选单位,但默认情况下,如果区域设置表示美国或缅甸(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.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();