Android Service PendingIntent在Activity中没有来自Service的回调(Fragment)

时间:2015-01-13 20:52:12

标签: android android-intent android-fragments service android-pendingintent

我正在尝试使用onActivityResultService触发PendingIntent方法。 一切顺利:后台线程完美运行,PendingIntentIntent对象发送到Fragment,但它不会运行onActivityResult方法。

以下是Service创建的代码:

Intent i = new Intent(getActivity(), UpdaterService.class);
Intent ei = new Intent();
PendingIntent pi = getActivity().createPendingResult(TASK_CODE_UPDATE, ei, 0);

onActivityResult:

public void onActivityResult(int requestCode, int resultCode, Intent data){
    super.onActivityResult(requestCode, resultCode, data);
    Log.d(TAG, "Result get");
    if(resultCode == RESULT_START){
        switch(requestCode){
        case TASK_CODE_UPDATE:
            lessonTextView.setText(data.getStringExtra(UpdaterService.EXTRA_LESSON_VIEW_TEXT));
            futureTextView.setText(data.getStringExtra(UpdaterService.EXTRA_FUTURE_VIEW_TEXT));
            break;
        }
    }
}

服务发送代码:

Intent i = new Intent()
    .putExtra(EXTRA_LESSON_VIEW_TEXT, lessonViewText)
    .putExtra(EXTRA_FUTURE_VIEW_TEXT, futureViewText);
try {
    pi.send(UpdaterService.this, HelperFragment.RESULT_START, i);
    Log.d(TAG, "Sending intent");
} catch (CanceledException e) {
    e.printStackTrace();
    Log.e(TAG, "Error sending intent");
}

2 个答案:

答案 0 :(得分:1)

这不是Intent对结果的正确使用。仅在从startActivityForResult()调用Activity到另一个Service时使用。在您致电pi.send()startActivity(),您实际上正在使用PendingIntent的内容{{1}}。

答案 1 :(得分:0)

使用PendingIntent中的createPendingResult()将信息从服务传递到活动工作 - 当服务调用pendingIntent.send()时,将调用活动的onActivityResult()方法。但是,有一些警告:

  1. 无法在片段中获取onActivityResult()回调 - 接收结果必须直接在活动中处理。
  2. 当接收结果的活动未运行时(例如,用户在后台操作正在进行时切换到另一个应用程序),将不会立即调用onActivityResult()方法 - 而是来自所有{的数据{1}}来电将排队,当活动再次启动时,它会立即收到所有排队的pendingIntent.send()来电。