У меня есть Activity
, в котором я зарегистрировав BroadcastReceiver
локально следующим образом:Местное вещание от службы не получил от деятельности
public class SomeActivity extends Activity{
public static final String PERFORM_SOME_ACTION = "PERFORM_SOME_ACTION";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.some_activity_layout);
.....
.....
IntentFilter filter = new IntentFilter();
filter.addAction(PERFORM_SOME_ACTION);
receiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
// perform some action ...
}
};
registerReceiver(receiver, filter);
}
.....
.....
}
И у меня есть Service
, от которого я транслируют Intent
следующим образом:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
sendBroadcast(i); /* Send global broadcast. */
return START_STICKY;
}
Это работает по назначению. После того, как это реализовано, я понял, что местное вещание будет более подходящим для этой ситуации:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Intent i = new Intent(SomeActivity.PERFORM_SOME_ACTION);
LocalBroadcastManager.getInstance(this).sendBroadcast(i); /* Send local broadcast. */
return START_STICKY;
}
К сожалению, эта схема не работает. Глобальная трансляция отправляется каждый раз, в то время как местная трансляция, по-видимому, никогда не отправляется/не принимается.
Что мне здесь не хватает? Невозможно ли отправлять местные трансляции между двумя отдельными компонентами приложения, например два отдельных Activity
или от Service
до Activity
? Что я делаю не так??
Примечание:
Согласно documentation, он является более эффективным и более важно, чтобы отправить местное вещание (внутри приложения вещания, сфера ограничивается собственными компонентами приложения в), а не глобальное вещание (трансляция, которая передается каждому подключению по телефону), когда нам не нужна широковещательная передача для распространения вне приложения. В этом причина внесения вышеупомянутых изменений.
Вы также должны 'LocalBroadcastManager.getInstance (это) .registerReceiver(); 'вместе с 'LocalBroadcastManager.getInstance (this) .sendBroadcast (i);' – Shaishav
@Shaishav: Это сработало. Вы можете отправить его в качестве ответа; Я буду отмечать его как правильный (вы были первыми). Однако есть ли какая-то концепция, которую я здесь отсутствует? Таким образом, местная трансляция будет приниматься только через «BroadcastReceiver», зарегистрированную на местном уровне? –
Да ... передача, отправленная с использованием экземпляра «LocalBroadcastManager», может быть получена только получателем, зарегистрированным с использованием экземпляра «LocalBroadcastManager». Не совсем уверен, как ответить на вопрос * почему. Кроме этого, мне нечего добавить в ответ «ρяσѕρєя K». – Shaishav