gpt4 book ai didi

android - ActivityRecognitionResult.hasResult(intent) 在向 Intent 添加额外内容时为 false

转载 作者:太空宇宙 更新时间:2023-11-03 11:09:39 24 4
gpt4 key购买 nike

我目前正在努力添加 Google API Activity 识别。

我成功地使用待定 Intent 报告了 Activity ,如示例所示:http://developer.android.com/training/location/activity-recognition.html

现在,我想要一个来自 IntentService 的回调(由挂起的 Intent 触发)。为此,我尝试了在以下位置找到的解决方案:Using ResultReceiver in Android

Intent intent = new Intent(ctx, ActivityRecognitionIntentService.class);
intent.putExtra(ActivityRecognitionIntentService.REQUEST_RECEIVER_EXTRA, new ResultReceiver(null) {
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
switch (resultCode) {
case ActivityRecognitionIntentService.RESULT_ID_WITH_ACTIVITYRESULT:

ActivityRecognitionResult result = resultData.getParcelable(ActivityRecognitionIntentService.RESULT_BUNDLE_ACTIVITYRESULT);
DetectedActivity mostProbableActivity = result.getMostProbableActivity();

observer.onNext(mostProbableActivity);

// Get the confidence percentage for the most probable activity
int confidence = mostProbableActivity.getConfidence();

// Get the type of activity
int activityType = mostProbableActivity.getType();

Log.d(TAG, getNameFromType(activityType) + " confidence: " + confidence + " isMoving: " + isMoving(activityType));
break;
case ActivityRecognitionIntentService.RESULT_ID_NO_ACTIVITYRESULT:
Log.e(TAG, "Nonfatal: no activity result");
break;
default:
Log.e(TAG, "Unexpected resultCode: " + resultCode);
}
}
});

不幸的是,这导致 ActivityRecognitionResult.hasResult(intent) 总是返回 false。

/**
* Called when a new activity detection update is available.
*/
@Override
protected void onHandleIntent(Intent intent) {

// outputs "onHandleIntent false"
Log.d(TAG, "onHandleIntent " + ActivityRecognitionResult.hasResult(intent));

}

进一步的测试表明,传递给 Intent 的任何额外内容都会导致同样的问题,例如:

Intent intent = new Intent(ctx, ActivityRecognitionIntentService.class);
intent.putExtra("TEST", "TESTING");
PendingIntent pendingIntent = PendingIntent.getService(ctx, 0, intent,
PendingIntent.FLAG_UPDATE_CURRENT);

ActivityRecognition.ActivityRecognitionApi.requestActivityUpdates(apiClient, 0, pendingIntent);

再次使 ActivityRecognitionResult.hasResult(intent) 返回 false。删除额外的“TEST”,给出预期的 Activity 结果。

最后我的问题是:

  • 为什么向 Intent 添加 Extras 会使 Intent 无法用于 Activity 识别
  • 是否可以通过其他方式创建回调。 注意:这是为了图书馆项目,所以不能使用 EventBus,因为我没有 Activity/Fragment 来接收发布的事件。

最佳答案

我找到了一个解决方案,使用 IntentService 中的 LocalBroadcastReceiver 转发结果。

可以在以下位置找到实现:https://github.com/mcharmas/Android-ReactiveLocation

关于android - ActivityRecognitionResult.hasResult(intent) 在向 Intent 添加额外内容时为 false,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27757437/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com