Как отправить намерение из службы в действие с помощью LocalBroadcastManager?

#android #android-intent #android-activity #android-service

#Android #android-намерение #android-activity #android-сервис

Вопрос:

У нас есть приложение, которое использует службу Android. Отправка намерений из службы в действие не работает с использованием LocalBroadcastManager. Однако намерение никогда не принимается действием… (Это работает с использованием context.sendBroadcast().)

Кто-нибудь знает, чего здесь не хватает?

Служба:

 public int onStartCommand(final Intent intent, int flags, int startId) {
        LocalBroadcastManager.getInstance(TestService.this).sendBroadcast(new Intent("bar"));

        return START_STICKY;
}
  

Действие:

 public class MyActivity extends Activity
{
private static final String TAG = MyActivity.class.getName();

private final BroadcastReceiver mReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        Log.d(TAG, "Recieved message by BroadcastReciever: "   intent.getAction());
    }
};

@Override
public void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    registerReceiver(mReceiver, new IntentFilter("bar"));

    Button loginButton = (Button) findViewById(R.id.button);
    loginButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {                
            Intent serviceIntent = new Intent("foo", null, this, TestService.class);
            startService(serviceIntent);
        }
    });
}
  

Манифест:

 <service android:name=".TestService"></service>
  

Ответ №1:

Вам нужно использовать LocalBroadcastManager.getInstance(this).registerReceiver(...) , а также LocalBroadcastManager.getInstance(this).unregisterReceiver(...) .

Обычные registerReceiver(...) и unregisterReceiver(...) предназначены для трансляций, отправленных Context#sendBroadcast() , и не будут получать отправленные LocalBroadcastManager#sendBroadcast() .