无需任何对话即可在Android中启用位置服务

时间:2016-07-18 15:14:43

标签: android

我想为我的应用启用/禁用位置服务,但如果关闭则不必提示用户启用它。我看到的所有示例都需要显示一些对话框。鉴于用户已经授予使用位置服务的许可,这似乎毫无意义。

1 个答案:

答案 0 :(得分:4)

  

我想为我的应用启用/停用位置服务,但如果已关闭,则无需提示用户启用它。

幸运的是,出于明显的隐私原因,这在普通设备上是不可能的,除非在Android(或特定设备型号)中存在一些错误。系统应用程序可能会这样做,这应该可以在root设备上实现,但我没有任何方案的详细信息。

  

鉴于用户已经授予使用位置服务的许可,这似乎毫无意义。

在Android 6.0之前,用户无法在普通Android设备上单独控制权限。因此,他们可能会禁用位置服务,只是为了能够使用碰巧请求位置的应用程序。

即使在Android 6.0+上,仅仅因为用户授予您的应用程序使用位置的权限并不意味着用户希望位置数据始终可用。他们可能只希望在特定时间对应用程序可用的位置(例如,在旅行时并且需要更多与位置相关的信息)。或者,正如评论者指出的那样,用户可能出于权力原因而禁用位置,而不是隐私。

  

如果应用程序需要控制位置服务,并且用户完全知道应用程序需要在运行时打开/关闭它

这需要是具有单独权限的单独功能(例如,某些/** * Removes a deep variable item * @param string $key Top-most array key value * @param array $path one-dimentional array of path: array('user', 'group', 'id') */ public function removeDeep($key, $path) { $new_arr = $this->get($key); $depth = count($path); switch ($depth) { case 1: return false; break; case 2: unset( $new_arr[$path[0]][$path[1]] ); break; case 3: unset( $new_arr[$path[0]][$path[1]][$path[2]] ); break; case 4: unset( $new_arr[$path[0]][$path[1]][$path[2]][$path[3]] ); break; } $this->set($key, $new_arr); } /** * Sets a deep variable item * @param string $key Top-most array key value * @param array $path one-dimentional array of path: array('user', 'group', 'id') * @param mixed $value The value you will set the path to */ public function setDeep($key, $path, $value) { $new_arr = $this->get($key); $depth = count($path); switch ($depth) { case 1: return false; break; case 2: $new_arr[$path[0]][$path[1]] = $value; break; case 3: $new_arr[$path[0]][$path[1]][$path[2]] = $value; break; case 4: $new_arr[$path[0]][$path[1]][$path[2]][$path[3]] = $value; break; } $this->set($key, $new_arr); } 权限),或者可能是设备管理员/设备所有者API的一部分。我们当然欢迎您提交功能请求。

  

如果已授予许可,则无需提示

访问位置数据的权限意味着允许覆盖用户对位置提供程序的启用/禁用设置。如果确实如此,那么就没有必要让位置提供者被禁用。