是否可以通过Shell启用位置服务?


14

是否可以通过ADB或终端仿真器启用定位服务(GPS或Google NetworkLocation)?我正在扎根电话。

要点:是否还可以更改其他与系统相关的设置?


已经问过这个问题,请参阅:我可以从命令行更改一些Android设置吗?
伊兹

2
@Izzy我不认为这完全是重复的。
马修(Matthew)

2
@Izzy无关。您链接的问题与位置服务无关。
lorddev

1
@lorddev不,没有明确提及。但是您可以使用相同的代码来调用位置服务的意图。使我有些困惑的是我的评论的措辞,暗示了“直接命中”(在这里你们都是对的:不完全相同)。很难说,半年后,那时我的想法...
Izzy

Answers:


12

是否可以通过ADB或终端仿真器启用定位服务(GPS或Google NetworkLocation)?

该命令是:

adb shell settings put secure location_providers_allowed gps

哪里,

  • settings会使得变成settings.db(部分com.android.providers.settings
  • putlocation_providers_allowedgps表中的值更新键secure

上述命令不会启用Google的位置服务。为了也启用它,请发出命令:

adb shell settings put secure location_providers_allowed gps,network

系统会显示一个弹出窗口,表示您同意位置服务。在我的Android 4.2.1中,我必须通过GUI或input keyevent每次从头启用服务时都同意。

                                                                    IMG:4.2.1

但是,在我的Android 5.0中,我可以将设置保存在对话框中,并且命令执行可以使下次的工作变得完美。

                                                                    IMG:5.0

某些设备(例如棒棒糖设备)具有三种“位置”模式,并且在上述命令中要传递的相关值为:

  • 高精度:gps,wifi,networkgps,network(如果您不希望启用Wi-Fi)
  • 节省电池:wifi,networknetwork
  • 仅设备: gps

禁用位置模式

adb shell settings put secure location_providers_allowed ' '

是否还可以更改其他与系统相关的设置?

见:

但是我已经有了一个很好的主意settings put


是否可以通过设备的控制台而不是通过外部计算机的ADB来实现相同的目的?
davide

1
是的,一点没错。但是,您将需要root访问权限或设备上运行的ADB无线。以这个答案为例。你会得到一个主意。
Firelord

该功能曾经在Android 5上运行,但在Android 6上不再可用。无论是否具有root用户,该设置都不会更改,并且与系统上配置的设置保持不变。它可能与location_providers_allowed弃用有关(developer.android.com/reference/android/provider/…)。有想法吗?
gw0

如果您只想打开/关闭GPS功能,则可以转到设置“位置”页面,然后单击“切换”按钮。也可以通过以下命令来执行此操作:adb shell am start -a android.settings.LOCATION_SOURCE_SETTINGS,然后单击切换按钮。
埃迪

13

对于Android 6.0

启用使用:

对于GPS: adb shell settings put secure location_providers_allowed +gps

对于网络: adb shell settings put secure location_providers_allowed +network

禁用:

全球定位系统 : adb shell settings put secure location_providers_allowed -gps

对于网络: adb shell settings put secure location_providers_allowed -network


这对我有用,而不是公认的答案。
TheMonkeyKing

谢谢,它有效。无论如何,我们可以使用一行adb命令启用/禁用gps和网络。我需要它来进行高精度定位。gps + network =高精度
Suban Dhyako

4

Android定位服务具有不同的选项:

1)高精度: gps, network

启用: adb shell settings put secure location_providers_allowed +gps,network

禁用: adb shell settings put secure location_providers_allowed -gps,network

2)仅电话: gps

启用: adb shell settings put secure location_providers_allowed +gps

禁用: adb shell settings put secure location_providers_allowed -gps

3)节省电池: network

启用: adb shell settings put secure location_providers_allowed +network

禁用: adb shell settings put secure location_providers_allowed -network


0

location_providers_allowed 不再适用于Android 10(API级别29)。

相反,您可以将设置location_modeLOCATION_MODE_HIGH_ACCURACY,值为3:

adb shell settings put secure location_mode 3

注意: > v29可能无法正常工作,因为位置模式中的文档提及以下内容:

在API级别28中不推荐使用此常量。检查位置模式和侦听更改的首选方法是通过LocationManager#isLocationEnabled()LocationManager#MODE_CHANGED_ACTION

不知道一旦常量消失,通过shell进行编程的方式是什么。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.