【问题标题】:How to disable location service programmatically?如何以编程方式禁用位置服务?
【发布时间】:2012-11-20 20:35:18
【问题描述】:

有没有办法以编程方式禁用谷歌位置服务? 我想写一个应用程序来用一个小部件来关闭它。

感谢您的帮助!

【问题讨论】:

  • 它必须存在,我有电源控制小部件可以做到这一点。
  • 电源控制小部件是系统应用程序,因此它可以修改位置提供者字符串。

标签: android service location


【解决方案1】:

有没有办法以编程方式禁用谷歌位置服务?

不,抱歉,您不能以编程方式禁用 GPS 等,除非通过安装在系统分区上的应用程序或由固件的签名密钥签名。 IOW,你需要一部有根手机。

【讨论】:

  • 谢谢,通过修改位置提供者字符串,设法用 root 完成。
【解决方案2】:

据我所知,LocationManager 是一个无法关闭的系统服务。不过,您可以禁用该服务使用的所有位置提供程序,例如无线位置、GPS 等。

【讨论】:

  • 也感谢您的回答!
【解决方案3】:

如果您使用的是UiAutomater,您可以通过模拟点击快速设置中的位置选项来关闭定位服务。过滤器逻辑可能取决于平台。您可以使用uiautomatorviewer 分析视图层次结构。

UiDevice.getInstance(getInstrumentation()).openQuickSettings();
UiDevice.getInstance(getInstrumentation()).findObject(new UiSelector().descriptionContains("Location").className(ViewGroup.class)).click();

build.gradle

androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.2'

【讨论】:

  • 完全不正确,这个答案是针对连接测试的。
【解决方案4】:

简短的回答是,不。但如果你真的需要关闭它,你可以提示用户这样做:

LocationManager loc = (LocationManager) this.getSystemService( Context.LOCATION_SERVICE );
        if( loc.isProviderEnabled(android.location.LocationManager.GPS_PROVIDER ) )
        {
            Toast.makeText( this, "Please turn off GPS", Toast.LENGTH_LONG).show();
            Intent myIntent = new Intent( Settings.ACTION_LOCATION_SOURCE_SETTINGS );
            startActivity(myIntent);

        }
        else
        {

        // Do nothing   
        }

这可能对您的情况没有帮助,但这是我知道的更改设置的唯一方法。

【讨论】:

  • 谢谢!我更多地考虑的是网络确定的用户位置,而不是 gps。
  • 啊,我对这个问题的解释显然是错误的。但仍然是一个有用的 sn-p 代码
猜你喜欢
  • 1970-01-01
  • 2013-12-10
  • 2012-02-07
  • 1970-01-01
  • 2016-02-19
  • 1970-01-01
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
相关资源
最近更新 更多