Я пытаюсь использовать sendOrderedBroadcast в своем приложении для Android.
Я хочу смочь отправить Намерение от одного из моих приложений другому, и я затем хочу вернуть данные из Приложения, которое получает Намерение, в этом случае булев 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 reciever, но он всегда возвращается как 0.
Кто-либо может видеть почему?
** resultReceiver - Ваш собственный BroadcastReceiver для обработки как заключительный получатель широковещательной передачи.*
Вам нужно получить 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