【问题标题】:GPS OnPause code does not turn off the GPSGPS OnPause 代码不会关闭 GPS
【发布时间】:2012-07-17 10:13:21
【问题描述】:

即使我安装了 OnPause 代码来停止 GPS 服务,GPS 也不会停止。这是我的代码。

    @Override
    protected void onPause() {
        if(lm != null) {
            lm.removeUpdates(ll);
        }
        ll = null;
        lm = null;
        super.onPause();
    }

只要将 lm 和 ll 声明为全局受保护变量,此代码就可以正常运行。问题是我离开程序后 GPS 图标一直亮着。如何关闭 GPS?我已经在手机和模拟器上测试过了。

【问题讨论】:

标签: android


【解决方案1】:

正如文档所说的 removeUpdates(LocationListener listener)

删除当前位置更新的任何当前注册 给定 LocationListener 的活动。

仅您当前的代码使用给定的 LocationListener 删除当前活动的位置更新的任何当前注册,而不是停止 GPS 或删除图标 从状态栏.so 是你想停止 GPS 那么你有两个解决方案

第一个解决方案:通过代码停止(仅适用于 Android 2.3 以下):

  try{
    String provider = Settings.Secure.getString(getContentResolver(), Settings.Secure.LOCATION_PROVIDERS_ALLOWED);

    if(!provider.contains("gps")){
         final Intent poke = new Intent();
         poke.setClassName("com.android.settings", "com.android.settings.widget.SettingsAppWidgetProvider"); 
         poke.addCategory(Intent.CATEGORY_ALTERNATIVE);
         poke.setData(Uri.parse("3")); 
         sendBroadcast(poke);
     }
     }
     catch(Exception e)
     {
      Log.d("Location", " exception thrown in enabling GPS "+e);
     }

Manifest.xml 中的权限:

android.permission.WRITE_SECURE_SETTINGS

第二种解决方案:启动 Gps 设置活动:

startActivityForResult(new Intent(Settings.ACTION_LOCATION_SOURCE_SETTINGS), 1);

【讨论】:

  • 我的手机是 Android 4。第二种解决方案允许用户禁用 GPS,而不是我想要做的。我想关闭它但不禁用它。我知道这是可能的,因为 iRegatta 做到了。
  • 您说解决方案 1 在我的手机上不起作用,对吗?我知道它正在利用已在以后的手机上修复的错误。如果我误解了,请纠正我。解决方案 2 不是我想要的。我希望在您退出应用程序时关闭 GPS。我的第二个解决方案是禁用 GPS 的屏幕。我不想禁用它。我希望它在没有用户做任何事情的情况下启动,就像它在 iRegatta 中所做的那样。
  • @AllenEdwards:我明白你想要什么,我正在努力帮助你。你能告诉我设备上的 GPS 是否可以禁用,那么你是如何启动 GPS 的?
  • GPS 一直处于启用状态,但只有在程序使用它时才会继续。当我打开设置位置管理器和位置侦听器的应用程序时,它会继续。退出应用程序后一个小时左右会熄灭。使用 iRegatta,只要使用我可能添加的退出按钮退出应用程序,它就会立即关闭,而不仅仅是退出应用程序的返回箭头。
【解决方案2】:

我的问题是位置管理器和位置侦听器名称在更改位置代码中被重新定义,因此它们不是全局语句中引用的全局名称。我从 YouTube 教程中复制了这段代码,我假设许多其他人也有同样的问题。一旦我删除了重新定义,当屏幕向后箭头时,GPS 几乎立即关闭。事实上,GPS 掉得太快了,这是我现在需要处理的问题。

lm.removeUpdate(ll); not releasing updates

【讨论】:

  • 这对我也有帮助 - 结果我设置了多个侦听器,但我的 removeUpdate() 代码只删除了其中一个。
【解决方案3】:

在你的 onPause() 中使用它

protected void onPause() 
{
    super.onPause();
    mylocaationoverlay.disableCompass();
    removeLocationUpdates();
}

这将是您的 removeLocationUpdates()

public void removeLocationUpdates()
{
    if(locationManager_ != null && myLocationListener_ != null)
        locationManager_.removeUpdates(myLocationListener_);
}

或者试试这个: onPause to stop LocationManager

【讨论】:

  • 但它并没有关闭 GPS。
  • 无法通过代码关闭GPS,只能停止监听更新!
  • @Carnal 我有另一个应用程序会在 GPS 退出时关闭它,称为 iRegatta。但是,它不会关闭由我的程序打开的 GPS,这很好。我只想在我的应用启动时关闭 GPS。
  • 要从您的应用程序打开/关闭 GPS,您需要“root”。期间。
猜你喜欢
  • 2012-06-30
  • 2023-04-04
  • 2014-12-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-23
  • 2014-03-22
相关资源
最近更新 更多