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.*
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