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 ответов
вам нужно получите дополнительный пакет результатов данных и добавить свои данные.
попробуйте что-то вроде этого:
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