2010-05-31 2 views
7

Я пытаюсь использовать sendOrderedBroadcast в своем приложении для Android.Android - sendOrderedBroadcast help

Я хочу, чтобы иметь возможность отправлять намерение из одного из моих приложений в другое, и затем я хочу получить данные из приложения, которое получает намерение, в данном случае логическое значение true или false.

Вот текущий код:

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); 

ли это правильный способ добиться того, чего я хочу?

Если да, то что я использую в качестве параметра resultReceiver *? (3-й параметр)

И как я могу получить данные обратно из трансляции?

Я сделал быстрый google и не придумал ни одного примера, какой-либо помощи или примеров, которые были высоко оценены.

ОБНОВЛЕНО КОД:


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); 

      } 

Так согласно Док, я должен верните 100 обратно в приемник DomainBroadcast, но он всегда возвращается как 0.

Может ли кто-нибудь понять, почему?

** resultReceiver -. Ваш собственный BroadcastReceiver рассматривать в качестве конечного получателя вещания *

+1

У вас есть два 'OnReceive()' методы выше. – JRL

ответ

13

Вам нужно get the extra data results Bundle и добавлять в него данные.

Попробуйте что-то вроде этого:

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); 
    } 
} 

Которая производит желаемый результат:

$ 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

Как это будет работать, если у вас есть два приемника вещания. В примере, который я запускаю, входящий приемник запускается только один раз. –