2012-04-28 40 views
5

Tôi thực hiện Activity X. Tôi nhận được PendingIntent P từ số Service S. Tôi biết chắc chắn rằng P trỏ đến không rõActivity Y trả về kết quả R qua phương pháp setResult của nó.Bắt đầu PendingIntent cho kết quả

Làm cách nào để bắt đầu P trong X, để nhận kết quả R trong X.onActivityResult?

+0

PS. Như với lệnh gọi 'startActivityFotResult' thông thường, tôi cũng muốn được thông báo khi Y bị hủy (R bằng' RESULT_CANCELED' trong trường hợp này). – wrygiel

Trả lời

-1

tôi đã dành một số thời gian đào vấn đề này và kết luận của tôi là nó là không thể mà không cần thay đổi nhất định trong cả hoạt động (XY):

Trong Activity X:

  • Bạn nên tạo thêm một số PendingIntent (P2), lần này trong ngữ cảnh Activity X, sử dụng X.createPendingResult. Bây giờ, gửi dữ liệu qua P2 sẽ dẫn đến việc gọi số X.onActivityResult.
  • Bạn nên đính kèm PendingIntent P2 làm thêm PendingIntent P trước khi send -giảm.

Trong Activity Y:

  • Bạn nên giải nén PendingIntent P2 từ getIntent() của nó.
  • Bạn không nên gọi số setResult, nhưng đặt kết quả của bạn trong một số trường cục bộ.
  • Bạn nên ghi đè onDestroy và gửi PendingIntent P2 từ đó.

Tại sao theo cách này?

Tôi đoán đó là điều gì đó về bảo mật của một loại. Activity Y có thể được bắt đầu bằng một nhiệm vụ riêng biệt (hơn Activity X). Có lẽ setResult được thiết kế để xử lý các kết quả vượt qua chỉ trong cùng một tác vụ? Để định nghĩa nhiệm vụ, hãy xem here.

+0

Tôi đã trả lời câu hỏi của riêng mình. Tôi không phải là một chuyên gia và có thể tôi đã sai. Nó có thể là không khôn ngoan để chấp nhận câu trả lời này cho đến khi ai đó xác nhận nó. – wrygiel

5

Dịch vụ Google Play sử dụng PendingIntent đối tượng để giải quyết các lỗi cho phép trong cùng một kịch bản:

IntentSender intentSender = pendingIntent.getIntentSender(); 
activity.startIntentSenderForResult(intentSender, REQUEST_CODE, null, 0, 0, 0); 

Xem Activity.startIntentSenderForResult() cho tài liệu.

Các vấn đề liên quan