2010-05-31 81 views
7

我正在尝试在我的Android应用中使用sendOrderedBroadcastAndroid - sendOrderedBroadcast帮助

我希望能够将Intent从我的一个应用程序发送到另一个应用程序,然后我想从接收Intent的应用程序中获取数据,在这种情况下,它是一个布尔值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 *参数? (第三参数)

然后如何从广播中接收数据?

我已经做了一个快速谷歌,并没有拿出任何例子,任何帮助或例子非常感谢。

更新的代码:


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

      } 

因此根据文档的我应该在我的DomainBroadcast接收器中收到100回,但总是回到0.

任何人都可以看到为什么?

** resultReceiver - 你自己的BroadcastReceiver治疗作为广播的最终接受*

+1

你有以上两个'的onReceive()'方法。 – JRL 2010-05-31 16:57:18

回答

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

如果您有两台广播接收机,这将如何工作。在我运行的一个例子中,传入的接收器只被触发一次。 – 2010-06-15 17:51:16