Android移动设备实际上确实知道它在哪里 - 但有没有办法通过国家代码或国家/地区名称来检索国家/地区?
无需知道确切的GPS位置 - 国家代码或名称就足够了,我正在使用以下代码:
String locale = context.getResources().getConfiguration().locale.getCountry(Locale.getDefault());
System.out.println("country = "+locale);
Run Code Online (Sandbox Code Playgroud)
但它给了我"美国"代码,
但我的设备保存在印度; 有没有办法找到设备当前国家代码而不使用GPS或网络提供商.因为我正在使用平板电脑 提前致谢.
获取国家/地区代码的最佳方式是什么?截至目前,我知道两种方法是通过TelephonyManager和另一种方法获取Locale,这是另一种在android中查找国家/地区代码的最佳和独特方式.
我通常从设备的语言中获取国家/地区.它有效,但现在我必须承认巴西.而且大多数设备只有葡萄牙语(pt_PT),没有葡萄牙语(巴西)选项.
我查了一下这个帖子:我在哪里? - 获得国家
方法
String locale = context.getResources().getConfiguration().locale.getCountry();
String locale = context.getResources().getConfiguration().locale.getDisplayCountry();
Run Code Online (Sandbox Code Playgroud)
仍然是语言,没有帮助.
还有sim卡的建议,但我不确定这是否可靠(所有的SIM卡都有这个独特的标识吗?),它也不是我需要的,因为用户无法改变它(如果是设置就是这种情况),它将排除使用没有SIM卡的设备的用户(可能他们只是使用WLAN).
还有地理位置建议,但这可能不适用于已停用它的设备.还是我错了?
如果没有别的帮助我会在我的应用程序中进行对话或菜单设置,以便用户可以在那里选择它.但我首先要确认该设备是否有可靠的可能性.
在我的应用程序中,我推荐相关的应用程序,但只想推荐它们,如果它们实际上可以安装在设备上(例如相关应用程序的目标国家/地区的设备,正确的操作系统版本等).请参阅https://developer.android.com/google/play/filters.html
这个问题与" Android:获取用户的当前位置而不使用gps或互联网 " 相同的主流stackoverflow问题直接相关,其中接受的答案实际上没有回答问题.
我应该能够通过网络提供商而不是GPS或互联网获取设备的当前位置名称(例如:城市名称,村庄名称).以下是该问题的公认答案.(以下代码部分应包含在onCreate()方法中)
// Acquire a reference to the system Location Manager
LocationManager locationManager = (LocationManager) this.getSystemService(Context.LOCATION_SERVICE);
// Define a listener that responds to location updates
LocationListener locationListener = new LocationListener() {
public void onLocationChanged(Location location) {
// Called when a new location is found by the network location provider.
makeUseOfNewLocation(location);
}
public void onStatusChanged(String provider, int status, Bundle extras) {}
public void onProviderEnabled(String provider) {}
public void onProviderDisabled(String provider) {}
};
// Register the listener …Run Code Online (Sandbox Code Playgroud) 我在Google Play商店中有一款游戏可以选择将得分系统从积分改为$.显然,这是韩国赌博和非法的模拟.我得到了谷歌的官方谴责,他们将我的应用程序从韩国市场上撤下,并将我的成熟度评级提高到"成熟".虽然许多用户喜欢这种额外功能,但对于游戏来说完全没有必要.我想只在韩国禁用它.但是我需要一些可靠的方法.
我虽然关于使用语言环境,但用户可以改变它.
context.getResources().getConfiguration().locale.getDisplayCountry(Locale locale);
Run Code Online (Sandbox Code Playgroud)
我找到了这个:
android.telephony.TelephonyManager.getNetworkCountryIso()
Run Code Online (Sandbox Code Playgroud)
国家ISO是否会保证是正确的?我有一种不同的方法可以忽略吗?
此外,我的应用程序没有GPS权限.我认为仅针对此用例启用它是错误的.另外我想过多个APK.这将是最后的手段.我相信他们会被视为两个独立的应用程序.我不会得到我所有的好评和下载.
希望如果我开始工作,我可以让Google重新考虑他们的决定.
编辑:@Nobu Games提出了一个很好的观点.这确实需要适用于平板电脑.
我通过这个答案的代码获得了国家iso :
TelephonyManager tm = (TelephonyManager)getSystemService(Context.TELEPHONY_SERVICE);
String countryCode = tm.getSimCountryIso();
Run Code Online (Sandbox Code Playgroud)
我怎样才能获得国家的前缀电话号码?
例如,+ 972为il.
我认为有人试图让我在AdMob中被禁止 - 来自"未知"国家/地区的地理位置点击次数达到了点击率80%-90%(其他国家<3%).
如果用户形成"未知"国家/地区,是否有办法阻止展示广告?
我正在创建一个应用程序,该应用程序将根据您的移动网络提供商所在的国家/地区显示该国家/地区的所有替代移动网络提供商的列表。为此,我正在使用telephonyManager.getSimCountryIso()检索国家/地区代码。
官方的android开发人员文档说:“返回与SIM卡提供商的国家/地区代码等效的ISO国家/地区代码”,因此从此我希望国家/地区代码始终始终与设备位置无关。但这不是它实际的工作方式! 例如,我最近遇到这种情况:我有一个带有西班牙SIM卡的android设备,属于西班牙网络提供商。因此,如果我在西班牙,TelephonyManager.getSimCountryIso()将返回“ es”。一切正常。问题例如,当我去法国旅行时,我调试了应用程序,发现telephonyManager.getSimCountryIso()返回的国家代码为:“ nl”(来自荷兰! 。与西班牙使用的设备和SIM卡相同,因此国家/地区代码ISO仍应为“ es”。
我的问题是这种方法实际上如何工作?如果我使用西班牙SIM卡,为什么会收到国家代码“ nl”(荷兰)?
预先感谢您的任何帮助
我想在不使用SIM卡的情况下获取设备国家/地区代码。
例如,如果国家/地区:斯里兰卡国家/地区代码:LK
我的最终目标是获取调用代码(斯里兰卡为+94)
我尝试过
TelephonyManager tm = (TelephonyManager)this.getSystemService(getApplicationContext().TELEPHONY_SERVICE);
String countryCodeValue = tm.getNetworkCountryIso();
Run Code Online (Sandbox Code Playgroud)
但这返回空字符串
如何获得时区缩写,如IST(印度标准时间),ET(东部时间)等.
我使用下面的代码来获取android中的时区信息,
选项1:
String mobileTimeZone = Calendar.getInstance().getTimeZone()
.getDisplayName(false, TimeZone.SHORT);
Run Code Online (Sandbox Code Playgroud)
我选择了不同的时区和输出如下,
GMT + 13:00
GMT + 00:00
但是当设置某些时区时,它会给我正确的缩写代码作为输出,如下所示,
美东时间
我还尝试了下面的代码,它给出了时区的完整描述.
选项2:
String mobileTimeZone = Calendar.getInstance().getTimeZone().getID();
Run Code Online (Sandbox Code Playgroud)
获得以下输出,这只是区域名称:
太平洋/中途岛
太平洋/火奴鲁鲁
美洲/蒙得维的亚
是否有任何id或表的列表,包含所有时区供我映射.
而且还需要考虑白天节省的费用.
帮我从android手机上获取Time Zone的缩写.
我现在可以获得国家代码,但我需要国家的全名.
我该怎么做?
public static String getCountry(Context c) {
TelephonyManager manager = (TelephonyManager) c
.getSystemService(Context.TELEPHONY_SERVICE);
return manager.getNetworkCountryIso().toUpperCase();
}
Run Code Online (Sandbox Code Playgroud) 我必须在不同的时区使用Java 8日期/时间.例如:
LocalDateTime dateTime = LocalDateTime.of(2017, Month.JUNE, 1, 13, 39);
Instant instant = dateTime.atZone(ZoneId.of("Europe/Paris")).toInstant();
Run Code Online (Sandbox Code Playgroud)
时间帧是到dateTimes之间的实例
但我不想硬编码时区,这总是一个不好的做法
我在Java API中找不到任何常量来表示不同的时区,如https://en.m.wikipedia.org/wiki/List_of_tz_database_time_zones
是否有任何映射,因为它在短区ID?
https://docs.oracle.com/javase/8/docs/api/java/time/ZoneId.html#of-java.lang.String-java.util.Map-
android ×11
java ×3
google-play ×2
locale ×2
localization ×2
location ×2
timezone ×2
abbreviation ×1
admob ×1
date ×1
datetime ×1
iso ×1
java-8 ×1
setting ×1