我正在尝试从Google Play安装应用.我可以理解,在打开Google Play商店网址时,它会打开Google Play,当我按下后退按钮时,活动会恢复.
Intent marketIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(appURL));
marketIntent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY | Intent.FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET);
startActivity(marketIntent);
Run Code Online (Sandbox Code Playgroud)
当我回到活动时,我试着调用它onResume()来检查应用程序是否已安装,但是我收到错误:
@Override
protected void onResume() {
super.onResume();
boolean installed = false;
while (!installed) {
installed = appInstalledOrNot(APPPACKAGE);
if (installed) {
Toast.makeText(this, "App installed", Toast.LENGTH_SHORT).show();
}
}
}
private boolean appInstalledOrNot(String uri) {
PackageManager pm = getPackageManager();
boolean app_installed = false;
try {
pm.getPackageInfo(uri, PackageManager.GET_ACTIVITIES);
app_installed = true;
}
catch (PackageManager.NameNotFoundException e) {
app_installed = false;
}
return app_installed ;
}
Run Code Online (Sandbox Code Playgroud)
错误如下:
E/AndroidRuntime(796):java.lang.RuntimeException:无法启动活动ComponentInfo {com.example.appinstaller/com.example.appinstaller.MainActivity}:android.content.ActivityNotFoundException:找不到处理Intent的活动{act = …
是否有一种可靠的方法来检测GPS给出的位置是一种欺骗(如果某个模拟位置已在后台设置到设备?
市场上有应用程序可以为GPS提供假位置.
https://play.google.com/store/apps/details?id=com.lexa.fakegps&hl=en
有根用户可以在不设置"允许模拟位置"选项的情况下运行假GPS.
有没有办法检测欺骗位置?
我在这里发布了解决方案,因为很少有人不知道这个问题. 禁用/检查模拟位置(防止gps欺骗)
如果用户伪造该位置,我将阻止用户使用我的应用.所以我isFromMockProvider用来检查位置是否是假的(按照这里).但isFromMockProvider()在某些情况下可能会为伪造的位置返回false.
public void onLocationChanged(Location location) {
textView.append("long:"+location.getLatitude()+" - lat:"+location.getLongitude()+" - isMock :"+location.isFromMockProvider() + "\n");
}
Run Code Online (Sandbox Code Playgroud)
我的情况是:我使用假冒伪劣GPS定位到一个位置然后我禁用虚假位置并转到我的应用程序.然后onLocationChanged返回假位置isFromMockProvider() = false
录像机:https://www.youtube.com/watch?v = rWVvjOCaZiI(在此视频中,我目前的位置是16.06,108.21,假位置是36.26,138.28.你可以在上一个视频中看到位置是36.26, 138.28但isFromMockProvider = false)
有没有办法检测用户在这种情况下是否使用虚假位置?任何帮助或建议将非常感谢.
DEMO项目
我安装了一个虚假的位置应用程序,并设置我的位置不同.然后打开谷歌地图和微信应用,
然后我想阻止微信分析我以前收到的真实位置和新假位置.
但同样的结果,它检测到我的真实位置.
我真的很想了解他们是如何做到这一点的.有任何想法吗?
我试过的
UPDATE
即使在禁用时也使用GPS.
07-02 11:46:15.504 2346-2356 /?D/LocationManagerService:请求434a7e28 gps从com.tencent.mm请求[ACCURACY_FINE请求gps = + 1s0ms最快= + 1s0ms](10173)
结论
是否有一种万无一失的方法来检测用户是否伪造他/她的GPS位置?
该技术应该适用于没有蜂窝连接硬件的Android设备.即仅限Wi-Fi
我正在开发一个应用程序,如果使用这段代码启用模拟位置设置,用户将无法使用它
if (Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ALLOW_MOCK_LOCATION).equals("0"))
return false;
else
return true;
Run Code Online (Sandbox Code Playgroud)
好吧,它在我从KitKat到Marshmallow系统的大多数测试设备上运行良好,直到我在使用Marshmallow OS的这个设备上尝试我的应用程序,模拟设置显然是OFF,但上面的代码一直告诉我模拟设置为ON这是一个错误吗?还是我错过了什么?