Vous avez besoin de faire de la coutume resultreceiver classe étendue de
ResultReceiver
puis met en œuvre la resultreceiver interface de votre activité
-
Passer personnalisé resultreceiver objet de intentService et dans
intentservice extraire seulement l'objet de récepteur et d'appel
le récepteur.send() fonction permettant d'envoyer quoi que ce soit à l'appel de l'activité dans
Faisceau objet.
voici customResultReceiver classe :
public class MyResultReceiver extends ResultReceiver {
private Receiver mReceiver;
public MyResultReceiver(Handler handler) {
super(handler);
// TODO Auto-generated constructor stub
}
public interface Receiver {
public void onReceiveResult(int resultCode, Bundle resultData);
}
public void setReceiver(Receiver receiver) {
mReceiver = receiver;
}
@Override
protected void onReceiveResult(int resultCode, Bundle resultData) {
if (mReceiver != null) {
mReceiver.onReceiveResult(resultCode, resultData);
}
}
}
met en œuvre la Myresultreceiver.récepteur d'interface en activité, créez une variable de classe
Public MyResultReceiver mReceiver;
initialiser cette variable dans onCreate:
mReceiver = new MyResultReceiver(new Handler());
mReceiver.setReceiver(this);
Passer cette mReceiver à la intentService via:
intent.putExtra("receiverTag", mReceiver);
et chercher dans IntentService comme:
ResultReceiver rec = intent.getParcelableExtra("receiverTag");
et envoyer quoi que ce soit à l'activité à l'aide de rec comme:
Bundle b=new Bundle();
rec.send(0, b);
ce sera reçue en onReceiveResult de l'activité. Vous pouvez afficher le code complet à:IntentService: Fournir des données de retour à l'Activité
Edit: Vous devez appeler setReceiver(ce) dans onResume et setReceiver(null) dans onPause() pour éviter les fuites.