繁体   English   中英

以编程方式启用模拟位置

[英]Programmatically enable Mock Locations

是否有任何可能的方法可以在 Android 上启用模拟位置,而无需通过设置应用程序执行此操作? 我想尝试直接从我的应用程序打开模拟位置。 所以我想知道是否有一个 API 或者是否有某种我可以使用的 Intent。

在 Marshmallow 之前,可以通过编程方式更改“允许模拟位置”设置(但它需要 root):

Settings.Secure.putInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION, 1);

因此,不幸的是,您能做的最好的事情就是将用户指向使用以下代码设置模拟位置应用程序的实际屏幕:

startActivity(new Intent(android.provider.Settings.ACTION_APPLICATION_DEVELOPMENT_SETTINGS));

除非设备已植根,否则无法“以编程方式”做到这一点。

Process proc = Runtime.getRuntime().exec(new String[]{"su","pm grant YOUR_APP_PACKAGE_NAME android.permission.WRITE_SECURE_SETTINGS", "settings put secure mock_location 1"});

proc.waitFor();

int value = Settings.Secure.getInt(getContentResolver(), Settings.Secure.ALLOW_MOCK_LOCATION);

SOP.OUT("mock_location::::::::::::::::::::::::::::::: " + value);

仅适用于有根设备

在 Android 6+ 上,您可以运行 shell 命令appops以允许某些应用模拟位置:

adb shell appops set <PACKAGE> android:mock_location allow

例如:

adb shell appops set ru.gavrikov.mocklocations android:mock_location allow

我不是开发人员,不确定您是否可以在您的应用程序中执行此操作,但我想以 root 权限运行Runtime.getRuntime().exec(cmd)会起作用。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM