我希望我的应用程序能够在特定的地区(例如美国)运行。
我们可以限制在Play市场上分发应用程序,但我发现有一些方法可以安装这些应用程序。
我必须以某种方式限制应用程序的使用。
为此,我可以获取用户的GPS位置,并在第一次运行时使用Google的Geocode API。但是,如果用户前往其他地区怎么办?
我将不得不使用位置更改侦听器来处理此情况,但这会消耗电池电量。
如果我使用设备的时区,则用户可以更改它。
是否还有其他可能的方法来限制应用程序只在特定地区运行?
我希望我的应用程序能够在特定的地区(例如美国)运行。
我们可以限制在Play市场上分发应用程序,但我发现有一些方法可以安装这些应用程序。
我必须以某种方式限制应用程序的使用。
为此,我可以获取用户的GPS位置,并在第一次运行时使用Google的Geocode API。但是,如果用户前往其他地区怎么办?
我将不得不使用位置更改侦听器来处理此情况,但这会消耗电池电量。
如果我使用设备的时区,则用户可以更改它。
是否还有其他可能的方法来限制应用程序只在特定地区运行?
TelephonyManager
检查用户所注册的网络。和getNetworkCountryIso
说明getSimCountryIso
http://developer.android.com/reference/android/telephony/TelephonyManager.html#getSimCountryIso()
getNetworkCountryIso()
将为您提供用户当前注册的国家/地区的ISO代码。例如:如果您来自阿尔巴尼亚(al)并前往美国(us),则此函数将返回“us”。
getSimCountryIso()
将为您提供SIM卡所属国家/地区的ISO代码。例如:如果您来自阿尔巴尼亚(al)并前往美国(us),则此函数将返回“al”。
更新
如果服务器端可用,您可以集成http://www.whois.net/ip-address-lookup/以查找设备IP地址。您可以像这样获取IP。
通过所有这些函数(Wifi、网络提供商、IP、GPS、Google Play区域)的组合,您可以大大减少应用程序使用限制。另一方面,如果用户足够高级,并使用代理伪造IP,不打开Wifi / GPS并且没有SIM卡,则没有更多要做的了。
TelephonyManager tMgr = (TelephonyManager)mAppContext.getSystemService(Context.TELEPHONY_SERVICE);
String mPhoneNumber = tMgr.getLine1Number();