5

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

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

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

4

3 回答 3

1

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

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

您的当前代码仅使用给定的 LocationListener 删除当前活动的位置更新的任何当前注册,而不是停止 GPS 或从状态栏中删除图标。所以您是否要停止 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);
于 2012-07-10T07:34:50.803 回答
1

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

lm.removeUpdate(ll); 不发布更新

于 2012-07-17T02:13:21.320 回答
0

在你的 onPause() 中使用它

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

这将是您的 removeLocationUpdates()

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

或者试试这个: onPause 停止 LocationManager

于 2012-07-10T06:56:28.797 回答