Las siguientes llamadas onBind () no se activan

usando pan de jengibre 2.3.4 api lvl 10.

Estoy comenzando un servicio después de la bota terminada. Para ello he añadido un receptor de difusión que inicia el servicio. Estoy utilizando el mismo servicio en el lanzador. Estoy tratando de enlazar al servicio añadiendo params adicionales a Intent. Obtención de resultados de servicio por respuesta de difusión.

El problema es cuando se enlaza primero, se desencadena onBind () en el servicio. Otros enlaces no llaman a onBind () en el servicio. Creo que el problema es el servicio que comienza directamente after_boot. Cuando no comienzo el servicio en cargador y deje la actividad comenzarlo con Context.BIND_AUTO_CREATE que se comporta como esperado.

La única solución que se me ocurrió es cambiar onUnbind () del servicio y emitir onBind () en onRebind () llamada del servicio. No me gusta esta solución, ya que podría romper en versiones posteriores android conduciendo el método onBind () que se llama dos veces.

Entonces, ¿por qué no se activan los enlaces subsiguientes en los servicios que se inician después de completar el arranque. Cualquier otra solución elegante es bienvenida.

PD: Ya lo implementé en aidl, pero no me gusta, ya que el servicio va a hacer algunas cosas asíncronas para devolver los datos y tengo que añadir archivos aidl en ambas aplicaciones, agregará manejadores que conduce al código hinchado.

Gracias por adelantado. Snippet de mi código:

Manifiesto del servicio:

<intent-filter> <action android:name="com.organization.android.ACTION_BOOT_COMPLETED" /> </intent-filter> <intent-filter> <action android:name="com.organization.android.WORK_INTENT" /> </intent-filter> </service> <receiver android:name=".CoreServiceReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" > </action> <category android:name="android.intent.category.HOME" > </category> </intent-filter> </receiver> 

Cuando me enlace al servicio:

Intención intention = new Intent (WORK_INT); intent.putExtra ("param", param);

 context.registerReceiver (broadcastReceiver, new IntentFilter("com.organization.android.WORK_RESULT")); context.bindService(intent,mConnection, Context.BIND_AUTO_CREATE); 

}

Cuando obtengo el resultado:

 context.unbindService(mConnection); context.unregisterReceiver (broadcastReceiver); 

De la documentación sobre la vinculación a los servicios:

Varios clientes pueden conectarse al servicio a la vez. Sin embargo, el sistema llama al método onBind () de su servicio para recuperar el IBinder sólo cuando se une el primer cliente. A continuación, el sistema entrega el mismo IBinder a todos los clientes adicionales que se enlazan, sin llamar de nuevo a Bind ().

Este comportamiento no cambiará, por lo que su método de reemplazar onUnbind para devolver true, y luego llamar onBind durante onRebind está perfectamente bien, aunque el enlace original seguirá siendo enviado al cliente, no cualquier nuevo que pueda generar en su nueva llamada a onBind. (es decir, realmente no debería estar llamando a onBind, pero sólo manejar onRebind como un caso separado)

  • Empleos para GCM Network Manager
  • Obtener el color de píxel en segundo plano en Android
  • El servicio USSD no funciona
  • ¿Vincular el servicio a la actividad o fragmento?
  • Android PendingIntent Extra
  • StopService () detendrá un servicio de primer plano?
  • Prueba de unidad Actividad.startService () llamada?
  • ¿Por qué el servicio Android falla con NullPointerException?
  • ¿Es correcto llamar a Service.startService () desde Service.onBind ()?
  • ¿Cómo mantener un servicio ejecutándose en segundo plano incluso después de que el usuario abandone la aplicación?
  • Diferencia entre RTC y RTC_WAKEUP en android
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.