正确停止位置更新,故障安全

时间:2016-06-15 15:12:26

标签: android location fusedlocationproviderapi

请考虑这段代码:

public class Presence implements ConnectionCallbacks, OnConnectionFailedListener, LocationListener
{
          :
          :
    boolean pref_auto_mode;
          :
          :
    private Presence(Context context)
    {
        this.context = context;
        getAppSettings();

        gApiClient = new GoogleApiClient.Builder(context, this, this)
                .addApi(LocationServices.API)
                .build();
        createLocationRequest();
        if (!gApiClient.isConnecting() && !gApiClient.isConnected())
        {
            gApiClient.connect();
        }
    } // of constructor

    @Override
    public void onConnected(Bundle connectionHint)
    {
        Log.e(LOG_TAG, "In onConnected(), gApiClient.isConnected(): " + gApiClient.isConnected());
        createLocationRequest();
        getLocation();
        getSubLocality();

        if (pref_auto_mode)
            startLocationUpdates();
    } // of onConnected()
          :
          :
    private void getAppSettings()
    {
        // Get the user's preferences
        APP_USER_SETTINGS =     PreferenceManager.getDefaultSharedPreferences(context);

                :        
                :        
        pref_auto_mode = APP_USER_SETTINGS.getBoolean(Contract.PREF_AUTO_MODE, false);
                :        
    } // of getAppSettings()

} // of class Presence

这是按预期工作的。

在上面的同一Presence课程中,我尝试停止当用户关闭某个设置时使用以下方法停止:

public void stopLocationUpdates()
{
    if (gApiClient.isConnected())
    {
        LocationServices.FusedLocationApi.removeLocationUpdates(gApiClient, pendingIntent);
        LocationServices.FusedLocationApi.removeLocationUpdates(gApiClient, this);

        Log.e(LOG_TAG, "Location tracker stopped successfully.");

        requestingLocationUpdates = false;
    }
}

我确实看到了Toast。没有位置更新,一切都按预期沉默。但是经过几个小时的设备移动,突然间,我又开始获得位置更新,就像在onHandleIntent()的{​​{1}}中的所有代码都被忠实地执行了位置变化。

要设置自动模式,用户来启动应用程序,因此IntentService类肯定会被实例化(Singleton),并且应用程序中设置的任何内容都会反映到其上Presence标志,如果我没错。然而,我怀疑这面旗帜。

请让我知道还需要做些什么才能立即将位置更新带到 暂停 保持这种状态 直到用户打开设置?我做错了什么或遗失了什么?

非常感谢提前!

1 个答案:

答案 0 :(得分:0)

感谢所有审核代码并提供宝贵指示的人。

我必须制作另一个boolean字段变量stopLocationTrackerRequired并将其设置为onSharedPreferenceChanged()覆盖。仅当设置了此标记时,才会调用PresencestopLocationUpdates() 肯定 会关闭位置更新。

为了完整性,:

  
      
  • 请告诉我还需要做些什么才能让位置更新立即停止并保持这种状态直到用户将设置设置为ON?
  •   
  • 我做错了什么或遗失了什么?
  •   
  • stopLocationUpdates()正在执行实现功能所需的一切。
  • 真的很想知道,但是如上所示的更多控制缺乏