2010-05-31 3 views
7

Ich versuche, eine sendOrderedBroadcast in meiner Android App zu verwenden.Android - sendOrderedBroadcast Hilfe

Ich möchte in der Lage sein, den Intent von einer meiner Anwendungen zu einer anderen zu senden, und ich möchte dann Daten von der Anwendung abrufen, die die Absicht erhält, in diesem Fall eine boolesche wahr oder falsch.

Hier ist der aktuelle Code:

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

Ist dies der richtige Weg zu erreichen, was ich will?

Wenn ja, was verwende ich als Parameter resultReceiver *? (3. Parameter)

Und dann, wie bekomme ich Daten zurück von der Sendung?

Ich habe eine schnelle Google und habe keine Beispiele, keine Hilfe oder Beispiele sehr geschätzt.

AKTUALISIERT Code:


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

      } 

So nach dem ich Doc sollte Erhalten Sie 100 zurück in meinem DomainBroadcast Empfänger, aber es kommt immer als 0 zurück.

Kann jemand sehen warum?

** resultReceiver -. Ihre eigenen BroadcastReceiver als endgültiger Empfänger der Sendung zu behandeln *

+1

Sie haben zwei 'OnReceive()' Methoden oben. – JRL

Antwort

13

Sie müssen get the extra data results Bundle und Ihre Daten hinzufügen.

so etwas wie dieses Versuchen:

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

, die die gewünschte Ausgabe erzeugt:

$ 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

Wie würde das funktionieren, wenn Sie zwei Rundfunkempfänger hätten. In einem Beispiel habe ich ausgeführt, der eingehende Empfänger wird nur einmal ausgelöst. –

Verwandte Themen