2012-01-24 27 views
7

trong mẫu mã C2DM từ google, khi một thông báo recived trong BroadcastReceiver họ gọi:Tại sao gọi setResult trong BroadcastReceiver?

setResult(Activity.RESULT_OK, null /* data */, null /* extra */);

I didnt biết những gì setResult làm. đây là những gì họ nói trong tài liệu Android:

Thay đổi tất cả dữ liệu kết quả được trả về từ chương trình phát sóng này; chỉ hoạt động với các chương trình phát sóng được gửi qua Context.sendOrderedBroadcast. Tất cả dữ liệu kết quả hiện tại được thay thế bằng giá trị được đưa ra cho phương pháp này.

Ai đó có thể giải thích ý của chúng là gì và tại sao tôi cần gọi?

mã hoàn chỉnh:

public class C2DMBaseReceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     C2DMReceiver.runIntentInService(); 
     setResult(Activity.RESULT_OK, null /* data */, null /* extra */); 
    } 
} 

Trả lời

9

Phương pháp setResult(...) trong BroadcastReceiver, hơn bất cứ điều gì của mình cho mục đích theo dõi.

Nếu bạn đã quen với phương pháp Activity 'setResult(...)', bạn có thể nghĩ phương pháp này được phát sóng theo cùng một cách. Nhưng thay vì nhận được một phương pháp gọi lại như onActivityResult(int requestCode, int resultCode, Intent data) trong trường hợp của các hoạt động, phát sóng setResult(...) phương pháp được sử dụng để theo dõi các kết quả của các chương trình phát sóng theo một trật tự nhất định, đó là lý do tại sao documentation nói:

Chỉ làm việc với chương trình phát sóng được gửi qua Context.sendOrderedBroadcast. Tất cả dữ liệu kết quả hiện tại được thay thế bằng giá trị cho phương thức này.

Có nghĩa là bạn có thể tận dụng các phương pháp getResultCode(), getResultData() hoặc getResultExtras() biết mọi thứ đã đi như thế nào trong việc thực hiện các phương pháp onReceive(Context, Intent) trong tất cả các khác nhau BroadcastReceiver s đăng ký để xử lý phát sóng của bạn. Vì vậy, bạn có thể biết kết quả của việc thực hiện mã trong BroadcastReceiver trước đó được gọi trước khi thực hiện một trong tất cả các máy thu.

Chỉ nói Context.sendOrderedBroadcast() vì cuộc gọi thông thường đến phương thức sendBroadcast(...) có thể không chờ 1 người nhận hoàn thành quá trình thực thi trước khi bắt đầu một chuỗi khác để thực thi mã trong người nhận khác.

+0

+1 để được giải thích .. –

-1

phương thức setResult() đặt kết quả sẽ được sử dụng trong mục đích gọi. Giả sử bạn đã gọi trình thu tùy chỉnh của mình từ bất kỳ hoạt động nào khác bằng cách sử dụng startActivityForResult (intent, code), sau đó trong phương thức onActivityResult() trong cùng hoạt động, bạn có thể sử dụng các kết quả thu được từ hoạt động được gọi, chỉ khi có phương thức setResult() hoạt động khác. Nó chỉ là một cách để gọi một hoạt động thông qua ý định và nhận được kết quả trở lại hoạt động tương tự.

-1

Ví dụ: Trong hoạt động chính của bạn, bạn bắt đầu một hoạt động với mã yêu cầu. Chính bạn chờ kết quả ở cuối hoạt động này.

startActivityForResult (Intent intent, int requestCode); 

Vào cuối làm việc của mình, các hoạt động mới đặt ra một mã kết quả (làm việc Một thực hiện, công việc B thực hiện ... vv) và một ý định (không cần thiết), và kết thúc với bản thân cuộc gọi để kết thúc ().

void setResult (int resultCode, Intent data); 

Hoạt động chính của bạn nhận được kết quả này với funciton onActivityResult(). Nó kiểm tra mã yêu cầu để biết công việc nào đã được thực hiện và để có được kết quả/trạng thái của tác phẩm này. (và dữ liệu, nếu đã chờ đợi một ý định. nhưng dữ liệu cũng có thể là mã kết quả).

void onActivityResult(int requestCode, int resultCode, Intent data); 

Hy vọng tôi đã giúp bạn.

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