Ejemplo de servicio bind / unbind (android)

¿Puede darme un ejemplo simple de aplicación con servicio de fondo que utiliza métodos bind / unbind para iniciar y detener? Yo estaba googling para él para una media hora, pero esos ejemplos utiliza métodos startService / stopService o son muy difíciles para mí. gracias.

Puede intentar usar este código:

protected ServiceConnection mServerConn = new ServiceConnection() { @Override public void onServiceConnected(ComponentName name, IBinder binder) { Log.d(LOG_TAG, "onServiceConnected"); } @Override public void onServiceDisconnected(ComponentName name) { Log.d(LOG_TAG, "onServiceDisconnected"); } } public void start() { // mContext is defined upper in code, I think it is not necessary to explain what is it mContext.bindService(intent, mServerConn, Context.BIND_AUTO_CREATE); mContext.startService(intent); } public void stop() { mContext.stopService(new Intent(mContext, ServiceRemote.class)); mContext.unbindService(mServerConn); } 

Agregue estos métodos a su Actividad:

 private MyService myServiceBinder; public ServiceConnection myConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder binder) { myServiceBinder = ((MyService.MyBinder) binder).getService(); Log.d("ServiceConnection","connected"); showServiceData(); } public void onServiceDisconnected(ComponentName className) { Log.d("ServiceConnection","disconnected"); myService = null; } }; public Handler myHandler = new Handler() { public void handleMessage(Message message) { Bundle data = message.getData(); } }; public void doBindService() { Intent intent = null; intent = new Intent(this, BTService.class); // Create a new Messenger for the communication back // From the Service to the Activity Messenger messenger = new Messenger(myHandler); intent.putExtra("MESSENGER", messenger); bindService(intent, myConnection, Context.BIND_AUTO_CREATE); } 

Y puede vincular al servicio ovverriding onResume () y onPause () en su clase de actividad.

 @Override protected void onResume() { Log.d("activity", "onResume"); if (myService == null) { doBindService(); } super.onResume(); } @Override protected void onPause() { //FIXME put back Log.d("activity", "onPause"); if (myService != null) { unbindService(myConnection); myService = null; } super.onPause(); } 

Tenga en cuenta que cuando se vincula a un servicio sólo se llama al método onCreate() en la clase de servicio. En su clase de servicio necesita definir el método myBinder:

 private final IBinder mBinder = new MyBinder(); private Messenger outMessenger; @Override public IBinder onBind(Intent arg0) { Bundle extras = arg0.getExtras(); Log.d("service","onBind"); // Get messager from the Activity if (extras != null) { Log.d("service","onBind with extra"); outMessenger = (Messenger) extras.get("MESSENGER"); } return mBinder; } public class MyBinder extends Binder { MyService getService() { return MyService.this; } } 

Después de definir estos métodos, puede llegar a los métodos de su servicio en su Actividad:

 private void showServiceData() { myServiceBinder.myMethod(); } 

Y finalmente puede iniciar su servicio cuando se produce algún evento como _BOOT_COMPLETED_

 public class MyReciever extends BroadcastReceiver { public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (action.equals("android.intent.action.BOOT_COMPLETED")) { Intent service = new Intent(context, myService.class); context.startService(service); } } } 

Tenga en cuenta que al iniciar un servicio onCreate() y onStartCommand() se llama en clase de servicio y puede detener su servicio cuando otro evento ocurre por stopService () tenga en cuenta que su detector de eventos debería estar registrado en su archivo de manifiesto de Android:

 <receiver android:name="MyReciever" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" /> </intent-filter> </receiver> 

En primer lugar, dos cosas que tenemos que entender,

Cliente

  • Hace solicitud a un servidor específico

bindService(new Intent("com.android.vending.billing.InAppBillingService.BIND"), mServiceConn, Context.BIND_AUTO_CREATE);

Aquí mServiceConn es instancia de la clase de ServiceConnection (incorporada) es realmente la interfaz que necesitamos implementar con dos (1r para la red conectada y 2da red no conectada) método para supervisar el estado de la conexión de red.

Servidor

  • Se encarga de la solicitud del cliente y hace que la réplica de su propia que es privado para el cliente sólo que envían solicitud y esta rapa de servidor se ejecuta en hilo diferente.

Ahora en el lado del cliente, ¿cómo acceder a todos los métodos de servidor?

  • El servidor envía respuesta con objeto IBinder . Por lo tanto, IBinder objeto es nuestro manejador que accede a todos los métodos de Service mediante el operador (.).

.

 MyService myService; public ServiceConnection myConnection = new ServiceConnection() { public void onServiceConnected(ComponentName className, IBinder binder) { Log.d("ServiceConnection","connected"); myService = binder; } //binder comes from server to communicate with method's of public void onServiceDisconnected(ComponentName className) { Log.d("ServiceConnection","disconnected"); myService = null; } } 

Ahora cómo llamar al método que se encuentra en el servicio

 myservice.serviceMethod(); 

Aquí myService es objeto y serviceMethod es un método en servicio. Y de esta manera la comunicación se establece entre el cliente y el servidor.

  • Actividad de Android sin GUI
  • Android: ¿Cómo repetir un servicio con AlarmManager cada 15 minutos, pero sólo se ejecuta de 8:00 AM a 18:00 PM?
  • Depurar servicio de fondo en android utilizando intelliJ
  • Lanzar una excepción personalizada de un servicio a una actividad
  • Obtener: No se permite iniciar el servicio Intención ... sin permiso Proceso de servicio es malo
  • ¿Es posible utilizar la herencia en las interfaces AIDL?
  • ¿Cómo eliminar todas las notificaciones cuando se cancela una aplicación de Android (actividad o servicio)?
  • Grabación de errores en vídeos android
  • Cómo detectar la visibilidad del selector de método de entrada sin el permiso de accesibilidad
  • Android ¿cómo espero hasta que un servicio esté realmente conectado?
  • ¿Puedo iniciarService desde la aplicación # onCreate ()?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.