为什么在实例化服务被杀死后,Android GoogleApiClient ActivityRecognitionApi仍会发送PendingIntents?

时间:2015-04-27 03:59:31

标签: android android-service google-api-client fusedlocationproviderapi

令人困惑的是,FusedLocationProviderApi停止发送意图。

更详细一点: 我有一个构建GoogleApiClient的Android服务。

mClient = new GoogleApiClient.Builder(this)
        .addApi(LocationServices.API)
        .addApi(ActivityRecognition.API)
        .addConnectionCallbacks(this)
        .addOnConnectionFailedListener(this)
        .build();
mClient.connect();

连接后,我使用以下方式请求位置更新:

// Set up periodic location updates
Intent locationIntent = new Intent(this, LocationReceiver.class);
mLocationPendingIntent = PendingIntent.getBroadcast(
    this,
    0,
    locationIntent,
    PendingIntent.FLAG_UPDATE_CURRENT);
mFusedLocationProviderApi.requestLocationUpdates(
    mClient,
    mLocationRequest,
    mLocationPendingIntent);

我使用以下方式请求检测到的活动:

// Set up activity recognition
Intent activityRecognizedIntent = new Intent(
    this,
    ActivityRecognizedReceiver.class);
mActivityRecognizedPendingIntent = PendingIntent.getBroadcast(
    this,
    0,
    activityRecognizedIntent,
    PendingIntent.FLAG_UPDATE_CURRENT);
mActivityRecognitionApi.requestActivityUpdates(
    mClient,
    ACTIVITY_DETECTION_INTERVAL,
    mActivityRecognizedPendingIntent);

当操作系统杀死该服务时,例如当我将新版本的应用程序推送到我的手机时,ActivityRecognizedReceiver会继续接收更新!我怎么能阻止这种情况发生?为什么LocationReceiver 停止接收更新?

2 个答案:

答案 0 :(得分:1)

您需要删除位置更新请求,例如:

LocationServices.FusedLocationApi.removeLocationUpdates(mGoogleApiClient,
                    getPendingIntent(context));

答案 1 :(得分:0)

应用程序必须仍在运行。除非你用一些应用程序杀死它,它不会停止。最好在设置中尝试杀戮。

如果你想以编程方式停止它

onPause方法中的

停止接收更新

并在onResume方法中再次开始接收更新。