Transmisión recibida dos veces

Estoy utilizando una emisión local para que mi servicio sepa que el AsyncTask ha terminado su trabajo, pero tengo un pequeño problema: la transmisión sólo se envía una vez (se crea por una función que sólo se llama cuando se inicia la aplicación), pero yo Recibirlo dos veces.

Código simplificado:

@Override protected void onPostExecute(HttpResponse result) { LocalBroadcastManager localBroadcastManager = LocalBroadcastManager.getInstance(getBaseContext()); localBroadcastManager.sendBroadcast(new Intent(getString(R.string.bc_CONNECTED))); } 

en el servicio:

 private BroadcastReceiver connectedBroadcastReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { Log.d(getString(R.string.app_tag), "broadcast received !!"); } }; @Override public int onStartCommand(Intent intent, int flags, int startId) { LocalBroadcastManager.getInstance(this).registerReceiver(connectedBroadcastReceiver, new IntentFilter(getString(R.string.bc_CONNECTED))); return START_STICKY; } 

¿Alguien ha encontrado un comportamiento tan extraño?

4 Solutions collect form web for “Transmisión recibida dos veces”

Siempre debe comprobar la intención Acción antes de responder a la emisión.

 public void onReceive(Context context, Intent intent){ if(intent.getAction() != null && intent.getAction().equals(getString(R.string.bc_CONNECTED))){ Log.d(getString(R.string.app_tag), "broadcast received !!"); } } 

Compruebe la documentación . Dice que puede recibir llamadas falsas. Así que compruebe siempre la acción

No se garantiza que los filtros de intención utilizados en registerReceiver (BroadcastReceiver, IntentFilter) y en los manifiestos de aplicación sean exclusivos. Son sugerencias para el sistema operativo acerca de cómo encontrar destinatarios adecuados. Es posible que los remitentes obliguen a la entrega a destinatarios específicos, evitando la resolución del filtro. Por este motivo, las implementaciones onReceive () deben responder sólo a las acciones conocidas, ignorando cualquier Intención inesperada que puedan recibir.

Tuve el mismo problema, el problema era que estaba registrando el receptor en el método onCreate y en el método onResume. La eliminación de la onCreate el problema se resolvió.

Tuve este problema porque me estaba registrando dos veces, ya que tenía dos filtros intención. Así que el sistema estaba pasando la misma intención dos veces.

  LocalBroadcastManager.getInstance(this).registerReceiver(mLocalReceiver,intentFilterNews); LocalBroadcastManager.getInstance(this).registerReceiver(mLocalReceiver,intentFilterWeather); 

¿Quieres cancelar el registro del receptor al salir de la aplicación? De lo contrario se obtiene con cada aplicación de inicio de otro receptor registrado. O debe comprobar si el receptor ya se ha registrado en una llamada de aplicación anterior, antes de registrarlo.

  • Una forma correcta de depurar un servicio en Android Studio?
  • Evitar que algunos usuarios cierren el servicio de Android
  • El servicio onCreate de Android se llama varias veces sin llamar a onDestroy
  • Android escucha los mensajes del socket del servidor
  • ¿Cómo mostrar Toast de un Servicio después de que la actividad principal termine?
  • Cómo evitar el servicio de asesinato del sistema cuando se cancela la aplicación / actividad
  • ¿Cómo obtengo el nombre de una clase de servicio en Android?
  • Servicio de fondo en Android - Necesita ayuda
  • ((Botón)) dentro de un servicio no funciona
  • El servicio de Android se detiene cuando se cierra la aplicación
  • Mejores prácticas para pubnub en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.