我正在尝试使用以下命令打开位置:
adb shell settings put secure location_providers_allowed gps,wifi,network
adb reboot
但是,它既不会更改变量 location_providers_allowed 的值,也不会在重启后在Android设置界面中将其打开。
我尝试使用相同的命令来设置其他变量,比如mock_location,并且它没有问题。 这个变量不可能改变吗?
Android版:M
答案 0 :(得分:2)
我还没有解决这个问题,但希望提供我觉得相关的其他信息,可能会帮助其他人解决这个问题。
我试图关注this,但在其中一条评论中提及:
这曾经在Android 5上运行,但在Android 6上不再使用。无论是否使用root,设置都不会更改并保持与系统上配置的相同。它可能与location_providers_allowed被弃用有关(developer.android.com/reference/android/provider / ...) - gw0 2015年11月4日7:45
我查看了Settings.Secure location_providers_allowed
的文档,果然:
此常量在API级别19中已弃用。使用LOCATION_MODE和MODE_CHANGED_ACTION(或PROVIDERS_CHANGED_ACTION)
我尝试设置location_mode
,但对启用/停用位置服务没有影响。
通过location_providers_allowed
标志手动打开/关闭位置服务时会受到影响,而不是location_mode
。我发现文档说它已被弃用,但它仍然被使用并且location_mode
我觉得很奇怪
不是
这就是我的全部。
答案 1 :(得分:2)
适用于Android 6.0
启用使用:
对于GPS:adb shell settings put secure location_providers_allowed +gps
对于网络:adb shell settings put secure location_providers_allowed +network
禁用:
GPS:adb shell settings put secure location_providers_allowed -gps
对于网络:adb shell settings put secure location_providers_allowed -network
答案 2 :(得分:1)
从Android 6到Android 9,如果您具有WRITE_SECURE_SETTINGS权限,则可以操纵“ location_providers_allowed”。
从Android 10开始,此操作如此处所述(搜索Android Q):
均无效。有一个新的API,但没有任何公开的方式可以更改任何设置:https://developer.android.com/reference/android/provider/Settings.Secure#LOCATION_PROVIDERS_ALLOWED
也许使用root用户或作为系统应用程序,都可以访问此文件:
@SystemApi
@TestApi
@RequiresPermission(WRITE_SECURE_SETTINGS)
public void setProviderEnabledForUser(String provider, boolean enabled, @NonNull UserHandle userHandle);
编辑:这非常适合作为系统应用程序。尚未尝试使用root。
答案 3 :(得分:0)
我通过拉/data/system/users/0/settings_secure.xml解决了这个问题
将以下设置的xml中的值更改为gps,网络或您想要的内容
<!DOCTYPE html>
<html>
<head>
<title>Parent</title>
<script src="//cdn.bootcss.com/jquery/2.2.4/jquery.js"></script>
<script>
$(function() {
$("#iframe1").attr("src","iframe.html");
//iframe加载完毕以后执行的事件
$("#iframe1").load(function(){
console.log('loaded...');
Handle();
})
});
function Handle(){
var money = 20000;
$("#iframe1").contents().find("#nominal").on("change keyup", function() {
var input = $(this);
// remove possible existing message
if( input.next().is("form") )
input.next().remove();
// show message
if( input.val() > money )
alert('Hello');
});
}
</script>
</head>
<body>
<iframe id="iframe1">
</iframe>
</body>
</html>
而不是将其推回到同一个地方并重新启动