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