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.

  • ¿Ya está funcionando el servicio Android?
  • Android: Pasar variables a un servicio ya en ejecución
  • El servicio de Google Geocoder no es viable (Coordenadas a la dirección)
  • Proporcionar un servicio de fondo para otras aplicaciones
  • Silencio de Google Iniciar sesión en el servicio de fondo Android
  • PARTIAL_WAKE_LOCK vs SCREEN_DIM_WAKE_LOCK en el subproceso de descarga
  • Ciclo de vida de BroadcastReceiver
  • ¿Por qué el servicio Android falla con NullPointerException?
  • Llame a una clase de servicio Una vez al día cuando la aplicación se inicia en android, con menos consumo de batería
  • Activar el servicio de fondo en un momento específico de Android
  • No se puede llamar a runOnUiThread en un subproceso desde dentro de un servicio
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.