2011-07-14 35 views
9

tôi có một Hoạt động mà tạo ra một BroadcastReceiver với một IntentFilter trong phương pháp onCreate(...):Gửi một phát sóng duy nhất Hoạt động cụ thể

IntentFilter iFilter = new IntentFilter("action"); 

receiver = new BroadcastReceiver() { 
    @Override 
    public void onReceive(Context context, Intent intent) { 

    } 
}; 

registerReceiver(receiver, iFilter); 

Ở phía bên kia là một IntentService, mà sẽ gửi một số dữ liệu:

Intent intent = new Intent(getApplicationContext(), receiver.class); 
intent.setAction("action"); 

[...] 

sendBroadcast(intent); 

Nhưng có vẻ như không hoạt động . Không có số Phát sóng.
Lớp dịch vụ của tôi nằm trong một thư viện android, có lẽ điều này gây ra sự cố.

Cảm ơn mọi lời khuyên.

+0

Nó sẽ làm việc. tại sao bạn nghĩ nó không hoạt động. Nó không quan trọng nếu nó trong một dự án thư viện, miễn là bạn tham khảo dự án thư viện của bạn trong dự án chính của bạn. –

+1

Tôi không nghĩ vậy. Tôi nhận thấy nó trong khi thử nghiệm. – CSchulz

+0

Đăng nhập hoặc in một cái gì đó trong phương thức onRecieve. Logcat nói gì? –

Trả lời

10

Chỉ cần tạo ý định với hành động của bạn.

Intent intent = new Intent("action"); 
[...] 
sendBroadcast(intent); 

Và xem xét đổi tên "hành động" thành một cái gì đó có ý nghĩa hơn, như "com.my.package.actions.SOME_ACTION".

Nếu bạn chỉ muốn điều đó thành phần ứng dụng của bạn nhận được phát sóng sau đó sử dụng:

  1. Đăng ký một phép trong Manifest của bạn với một mức độ bảo vệ signature (và xác định một use-phép cho phép đó). Thêm here.
  2. Sử dụng sendBroadcast(intent, permission), và chỉ định cho phép trong 1.
+0

Có tên có ý nghĩa hơn. ;) Khi tôi sử dụng cách đó mọi người có thể nhận được * Broadcast * của tôi và tôi muốn ngăn chặn. – CSchulz

+0

Đó là ý tưởng về sự kiện phát sóng. Ý bạn là gì? Các hoạt động của bạn nên dừng nghe ở đâu đó trong vòng đời của họ, có thể là trong phương thức onPause. – aromero

+0

Tôi có nghĩa là * Broadcast * có thể nhận được với các Hoạt động khác nhau không chỉ của riêng tôi, phải không? – CSchulz

5

nếu mục đích là bên duy nhất ứng dụng của bạn, hãy xem xét sử dụng LocalBroadcastManager

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