请考虑这段代码:
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
标志,如果我没错。然而,我怀疑这面旗帜。
请让我知道还需要做些什么才能立即将位置更新带到 暂停 保持这种状态 直到用户打开设置?我做错了什么或遗失了什么?
非常感谢提前!
答案 0 :(得分:0)
感谢所有审核代码并提供宝贵指示的人。
我必须制作另一个boolean
字段变量stopLocationTrackerRequired
并将其设置为onSharedPreferenceChanged()
覆盖。仅当设置了此标记时,才会调用Presence
类stopLocationUpdates()
, 肯定 会关闭位置更新。
为了完整性,:
- 请告诉我还需要做些什么才能让位置更新立即停止并保持这种状态直到用户将设置设置为ON?
- 我做错了什么或遗失了什么?
stopLocationUpdates()
正在执行实现功能所需的一切。