with servicio enlazado activity android android-service

android - servicio - onServiceConnected() no se llama



serviceconnection (7)

Tengo un problema con el uso de un servicio de fondo.
Estoy utilizando el servicio de 2 actividades.

La primera actividad inicia el Service con startService(intent) y el bindService(intent, mConnection, Context.BIND_AUTO_CREATE); con bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

Esto funciona perfectamente y puedo enviar un Message en onServiceConnected() .

La segunda actividad solo se enlaza con el Service (ya que ya se inició), nuevamente utilizando bindService(intent, mConnection, Context.BIND_AUTO_CREATE);

Ahora aquí está mi problema:
En la segunda actividad tengo un Button que debería usar el servicio cuando lo presiono.
Sin embargo, nunca se llama a onServiceConnected() en esta actividad, por lo que no puedo obtener la carpeta para crear un Messenger para enviar un Message al servidor.

¿Alguien sabe cuándo se llama a onServiceConnected() exactamente, o qué es lo que posiblemente espera?
¿O tal vez algo más para solucionar este problema?

EDITAR: bindService devuelve falso, ¿qué podría causar esto?

Gracias por adelantado


Añadir bind en el manifiesto ..

<service android:name=".MyAccessibilityService" android:permission="android.permission.BIND_ACCESSIBILITY_SERVICE" > <intent-filter> <action android:name="android.accessibilityservice.AccessibilityService" /> </intent-filter> </service>

MyAccessibilityService el nombre de su servicio.


Después de un poco más de investigación, descubrí que este es un problema conocido en Android.

La segunda actividad de la que hablaba era una actividad que se usa como contenido dentro de una TabActivity .

La forma de solucionar este problema era llamar a bindService(...) en el contexto de la aplicación, en lugar de hacerlo en el contexto de la actividad utilizando getApplicationContext().bindService(...)


En mi caso, fue porque me había olvidado de crear una instancia del archivador dentro del servicio y, por lo tanto, onBind devolvió el valor nulo. Tuve esto:

private ServiceBinder mServiceBinder;

en lugar de esto:

private ServiceBinder mServiceBinder = new ServiceBinder();


Esto es lo que funcionó para mí.

En lugar de

public IBinder onBind(Intent intent) { return null; }

solía

public IBinder onBind(Intent intent) { return mMessenger.getBinder(); }


Me ha pasado justo ahora.
No se olvide de crear una instancia de su clase de binder antes de que regrese. Error tonto, pero sucede. Esperemos que esto ayude a alguien en el futuro.

private YourBinder thisBinder; oncreate { thisBinder = new YourBinder(); //don''t forget this. } public class YourBinder extends Binder { } public IBinder onBind(Intent intent) { return thisBinder; }


Necesitas agregar:

<service android:name="package.path.to.your.service.class" android:enabled="true"></service>

en el archivo manifiesto de Android.


Yo era xmarian y tuve el mismo problema y luego descubrí que no le había dado el nombre adecuado a ese servicio. Por lo tanto, el nombre del servicio debe tener el nombre de atributo. Supongo que el compilador xmarian hace lo mismo en esa entrada en Android XML.