2010-05-31 15 views
7

Tôi đang cố gắng sử dụng một số sendOrderedBroadcast trong ứng dụng Android của mình.Android - sendOrderedBroadcast trợ giúp

Tôi muốn có thể gửi Intent từ một trong các ứng dụng của mình sang ứng dụng khác và sau đó tôi muốn lấy lại dữ liệu từ Ứng dụng nhận được Intent, trong trường hợp này là boolean true hoặc false.

Đây là mã hiện tại:

Intent i = new Intent(); 
    i.setAction(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT); 
    i.putExtra("com.testnetworks.QCLEVEL", aProposedTheoreticalQoSLevel); 
    sendOrderedBroadcast(i, null, null, null, Activity.RESULT_OK, null, null); 

Đây có phải là cách chính xác để đạt được những gì mà tôi muốn?

Nếu vậy tôi sẽ sử dụng thông số nào làm thông số resultReceiver *? (Tham số thứ 3)

Và sau đó làm cách nào để nhận lại dữ liệu từ Phát sóng?

Tôi đã thực hiện một google nhanh chóng và không đưa ra bất kỳ ví dụ nào, bất kỳ trợ giúp hoặc ví dụ nào được đánh giá cao.

MÃ CẬP NHẬT:


sendOrderedBroadcast(i, null, domainBroadcast, null, Activity.RESULT_OK, null, null); 

class DomainBroadcast extends BroadcastReceiver{ 

    @Override 
    public void onReceive(Context arg0, Intent intent) { 
     String action = intent.getAction(); 

     if(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){ 
      Log.d("BROADCAST", "Returning broadcast"); 

      Bundle b = intent.getExtras(); 
      Log.d("BROADCAST", "Returning broadcast " + 
        b.getInt("com.testnetworks.INT_TEST")); 
     }  
    } 

@Override 
    public void onReceive(Context context, Intent intent) { 
      String action = intent.getAction(); 

      if(GlobalData.PROPOSE_IN_DOMAIN_ROAM_INTENT.equals(action)){ 

       Bundle b = intent.getExtras(); 
       int testQCLevel = b.getInt("com.testnetworks.QCLEVEL"); 
       switch(testQCLevel){ 
       case 1: 
        Log.d("QCLevel ", "QCLevel = UNAVAILABLE"); 
        break; 
       case 2: 
        Log.d("QCLevel ", "QCLevel = BELOWUSABILITY"); 
        break; 
       case 3: 
        Log.d("QCLevel ", "QCLevel = VOICE"); 
        break; 
       } 

       intent.putExtra("com.testnetworks.INT_TEST", 100); 

      } 

Vì vậy theo của Doc tôi nên nhận được 100 trở lại trong người nhận DomainBroadcast của tôi nhưng nó luôn luôn trở lại là 0.

Có ai có thể xem tại sao không?

** resultReceiver -. BroadcastReceiver riêng của bạn để điều trị như nhận thức của phát sóng *

+1

Bạn có hai 'onReceive()' phương pháp trên. – JRL

Trả lời

13

Bạn cần phải get the extra data results Bundle và thêm dữ liệu của bạn với nó.

Hãy thử một cái gì đó như thế này:

public class DemoOrderedBroadcast extends Activity { 
    private static String SOMETHING_HAPPENED = "com.example.somethinghappened"; 
    private static String EXTRA_INTEGER = "extra integer"; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     IntentFilter filter = new IntentFilter(SOMETHING_HAPPENED); 

     registerReceiver(new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Bundle results = getResultExtras(true); 
       results.putInt(EXTRA_INTEGER, 100); 
       Log.d("DemoOrderedBroadcast", 
         "In Initial Receiver: Put 'extra integer' = 100"); 
      } 
     }, filter); 

     Intent intent = new Intent(SOMETHING_HAPPENED); 
     sendOrderedBroadcast(intent, null, new BroadcastReceiver() { 
      @Override 
      public void onReceive(Context context, Intent intent) { 
       Bundle results = getResultExtras(true); 
       Log.d("DemoOrderedBroadcast", 
         "In Result Receiver: Got 'extra integer' = " 
           + results.getInt(EXTRA_INTEGER, -1)); 
      } 
     }, null, Activity.RESULT_OK, null, null); 
    } 
} 

nào tạo ra kết quả mong muốn:

$ adb -e shell am start -n com.example.DemoOrderedBroadcast/.DemoOrderedBroadcast 
Starting: Intent { cmp=com.example.DemoOrderedBroadcast/.DemoOrderedBroadcast } 
$ adb -e shell logcat | grep D/DemoOrderedBroadcast 
D/DemoOrderedBroadcast(1343): In Initial Receiver: Put 'extra integer' = 100 
D/DemoOrderedBroadcast(1343): In Result Receiver: Got 'extra integer' = 100 
+1

Làm thế nào điều này sẽ làm việc nếu bạn có hai máy thu phát sóng. Trong ví dụ tôi đang chạy, bộ thu đến chỉ được kích hoạt một lần. –