Investigamos en todo internet para así brindarte la respuesta para tu duda, si tienes alguna duda puedes dejarnos tu comentario y te contestaremos con gusto.
La pregunta se hizo hace unos meses, pero en caso de que alguien todavía esté buscando una respuesta, espero poder ayudar.
En el siguiente ejemplo, tenemos un servicio local, responsable de realizar algunas operaciones que consumen mucho tiempo. La actividad realiza las solicitudes al servicio, pero no se vincula a él, solo envía la intención con la solicitud. Además, Activity incluye la información de BroadcastReceiver que debe devolverse cuando se realiza el servicio con la tarea solicitada. La información se pasa por PendingIntent. El servicio maneja la tarea en segundo plano y cuando finaliza la tarea, el servicio transmite el BroadcastReceiver con una respuesta.
1. Cree la subclase BroadcastReceiver:
public class DataBroadcastReceiver extends BroadcastReceiver
static Logger log = LoggerFactory.getLogger(DataRequestService.class);
@Override
public void onReceive(Context context, Intent intent)
log.info(" onReceive");
Este receptor de transmisión será notificado desde el servicio, cuando se complete la tarea.
2. Crear servicio
public class DataRequestService extends Service {
private final class ServiceHandler extends Handler
public ServiceHandler(Looper looper)
super(looper);
@Override
public void handleMessage(Message msg)
log.info("handleMessage");
//... performing some time-consuming operation
Bundle bundle = msg.getData();
PendingIntent receiver = bundle.getParcelable("receiver");
// Perform the operation associated with PendingIntent
try
//you can attach data from the operation in the intent.
Intent intent = new Intent();
Bundle b = new Bundle();
//b.putString("key", value);
intent.putExtras(b);
receiver.send(getApplicationContext(), status, intent);
catch (CanceledException e)
e.printStackTrace();
@Override
public void onStart(Intent intent, int startId)
Bundle bundle = intent.getExtras();
Message msg = mServiceHandler.obtainMessage();
msg.setData(bundle);
mServiceHandler.sendMessage(msg);
Bueno, la parte más importante está en el método handleMessage(). El servicio simplemente realiza la operación de transmisión para entregar resultados al receptor de transmisión.
3. También debe registrar su receptor de transmisión y servicio en Manifest.xml
....
4. Y finalmente, haga una solicitud a su servicio desde Actividad:
Intent serviceIntent = new Intent(context, DataRequestService.class);
@Override
public void onClick(View v)
//this is the intent that will be broadcasted by service.
Intent broadcastReceiverIntent = new Intent(context, DataBroadcastReceiver.class);
//create pending intent for broadcasting the DataBroadcastReceiver
PendingIntent pi = PendingIntent.getBroadcast(context, 0, broadcastReceiverIntent, 0);
Bundle bundle = new Bundle();
bundle.putParcelable("receiver", pi);
//we want to start our service (for handling our time-consuming operation)
Intent serviceIntent = new Intent(context, DataRequestService.class);
serviceIntent.putExtras(bundle);
context.startService(serviceIntent);
5. Entrega de respuesta al cliente/actividad original.
Puede tener una actividad abstracta a partir de la cual se extenderán todas sus actividades. Esta actividad abstracta puede registrarse o darse de baja automáticamente como oyente de respuesta en el receptor de transmisión. No hay muchas opciones aquí en realidad, pero es importante que si sigues static referencias a su actividad, debe eliminar la referencia cuando se destruya la actividad.
Saludos,
rampas