#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()
.