2011-12-20 28 views
7

Tôi có thể nhận được thông báo C2DM nhưng tôi muốn gửi dữ liệu đến hoạt động đang chạy, tức là khi hoạt động đang chạy, nếu người nhận nhận được thông báo C2DM, để gửi dữ liệu đến hoạt động đang chạy. Mã của máy thu là (không có lỗi trong mã):Cách gửi dữ liệu đến hoạt động đang chạy từ Broadcast Receiver,

public class C2dmreceiver extends BroadcastReceiver { 

    @Override 
    public void onReceive(Context context, Intent intent) { 
     String action = intent.getAction(); 
     Log.w("C2DM", "Message Receiver called"); 
     if ("com.google.android.c2dm.intent.RECEIVE".equals(action)) 
     { 
      final String payload = intent.getStringExtra("key1"); 
      Log.d("C2DM", "message = " + payload); 
     } 
    }} 

Tôi đã cố gắng như thế này bên trong hoạt động này trong một nỗ lực để đăng ký nhận trong hoạt động để người nhận có thể gửi dữ liệu và các hoạt động chạy thể nhận dữ liệu: -

C2dmreceiver c2dmr = new C2dmreceiver(); 
Registration.this.registerReceiver(c2dmr, new IntentFilter()); 

tôi không biết những gì để đặt bên trong IntentFilter(), còn những gì khác tôi có phải đặt trong mã của hoạt động này và mã của người nhận để khi hoạt động đang chạy và một số tin nhắn C2DM đến người nhận có thể gửi dữ liệu đến hoạt động đang chạy.

Vì vậy, hãy cho tôi biết mã được đặt trong hoạt động và trong người nhận và cũng có thể có trong tệp kê khai để dữ liệu từ người nhận có thể được gửi đến hoạt động đang chạy.

Bất kỳ lời khuyên nào được đánh giá cao.

Trả lời

21

Trước hết, đó không phải là ý tưởng hay nhất để đăng ký bộ thu c2dm trong hoạt động. Làm điều đó trong biểu hiện. Để truyền dữ liệu đến hoạt động, bạn có thể tạo trường chuỗi tĩnh trong Activity và đặt String ở đó.

Bạn có thể làm một cái gì đó như thế này:

trong Activity

public static YourActivity mThis = null; 
@Override 
protected void onResume() { 
    super.onResume(); 
    mThis = this; 
} 
@Override 
protected void onPause() { 
    super.onPause(); 
    mThis = null; 
} 

Trong BroadcastReceiver của bạn:

@Override 
public void onReceive(Context context, Intent intent) { 
... 
if (YourActivity.mThis != null) { 
    ((TextView)YourActivity.mThis.findViewById(R.id.text)).setText("received c2dm"); 
} 
else { 
... 
} 
+0

tôi cần hoạt động của tôi có được các dữ liệu C2DM từ người nhận và cũng được thông báo về sự xuất hiện của dữ liệu, làm thế nào mà có thể được thực hiện? Tôi chỉ muốn biết làm thế nào hoạt động được đăng ký cho một số người nhận phát sóng cụ thể và nhận được thông tin cập nhật khi họ nhận được bởi người nhận. –

+1

Bạn không nên đăng ký C2DMReceiver trong hoạt động - bởi vì tin nhắn có thể đến khi hoạt động không được bắt đầu - bạn phải tập tin này. Để truyền dữ liệu, bạn có thể sử dụng các trường tĩnh hoặc singleton. – Jin35

+0

Vui lòng cho bạn triển khai ví dụ. –

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