【问题标题】:Why does the Android GoogleApiClient ActivityRecognitionApi still send PendingIntents after the instantiating service is killed?为什么Android GoogleApiClient ActivityRecognitionApi 在实例化服务被杀死后仍然发送PendingIntents?
【发布时间】:2015-04-27 03:59:30
【问题描述】:

令人困惑的是,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停止接收更新?

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢,我尝试停止 IntentService 本身,不知道您必须在 GoogleApiClient 中实际取消注册
    【解决方案2】:

    应用程序必须仍在运行。除非您使用某些应用程序将其终止,否则它不会停止。最好尝试在设置中杀死。

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

    在onPause方法中停止接收更新

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

    【讨论】:

    • 服务中没有 onPause 或 onResume 方法。
    • 服务的使用是为了无限期的运行能力,除非你自己停止它然后它会继续运行..你可以使用 stopself 或 stopservice 停止它。
    • 在代码中搜索适合停止服务的点。
    猜你喜欢
    • 1970-01-01
    • 2012-08-26
    • 2012-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多