Android - sendOrderedBroadcast help

匿名 (未验证) 提交于 2019-12-03 01:33:01

问题:

I am trying to use a sendOrderedBroadcast in my Android app.

I want to be able to send the Intent from one of my applications to another and I then want to get data back from the Application that recieves the Intent, in this case a boolean true or false.

Here is the current 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); 

Is this the correct way to achieve what I want?

If so what do I use as the resultReceiver* parameter? (3rd parameter)

And then how to I recieve data back from the Broadcast?

I have done a quick google and not come up with any examples, any help or examples greatly appreciated.

UPDATED 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 according to the Doc's I should recieve 100 back in my DomainBroadcast reciever but it always comes back as 0.

Can anyone see why?

**resultReceiver - Your own BroadcastReceiver to treat as the final receiver of the broadcast.*

回答1:

You need to get the extra data results Bundle and add your data to it.

Try something like this:

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

Which produces the desired output:

$ 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 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!