Android: Holen Sie sich das Ergebnis aus einem service

Habe ich android-service, die ich brauche, um ein Ergebnis zurückgeben, nachdem es gestartet wurde.
Also:

1) ich starte den Dienst

2) Der service etwas tut

3) Den Dienst gibt ein Ergebnis zurück,

Dachte ich, vielleicht kann ich eine singleton-Klasse, um das Ergebnis mitnehmen. Erstellt habe ich eine singleton-Klasse, um die service-speichern Sie das Ergebnis in es und dann nehmen Sie das Ergebnis aus dem Dienst eine Tätigkeit. Hier ist der code der Klasse:

public class Result {

    //SIGLETON DECLARATION

    private static Result mInstance = null;

    public static Result getInstance() { 
        if (mInstance == null) {
            mInstance = new Result();
        }
        return mInstance;
    }

    private Result() {
    }

    //CODE

    Object result;
    boolean resultIsSet = false;

    public void deletePreviousResult() {
        this.result = null;
        resultIsSet = false;
    }

    public void setResult(Object result) {
        Log.w("result", "setResult");
        this.result = result;
        resultIsSet = true;
    }

    public Object getResult() {
        Log.w("result", "getResult");
        while(resultIsSet == false) {}
        return this.result;
    }

Hier ist der code, den ich verwenden, um das Ergebnis zu erhalten:

public int getInfo() {
    Result.getInstance().deletePreviousResult();
    //start the service and ask to save the result in singleton class
    Intent myIntent = new Intent(mInstanceContext, MediaPlayerService.class);
    myIntent.setAction("getInfo");
    mInstanceContext.startService(myIntent);
    //take the result
    return (Integer) Result.getInstance().getResult();
}

Was ist zu tun in onStartCommand ist:

 Result.getInstance().setResult(mMediaPlayer.getCurrentPosition()); 

wo mMediaPlayer ist ein MediaPlayer-Objekt.

Aber das problem ist, dass wenn setResult soll auch genannt werden, in onStartCommand es wird nie aufgerufen! Warum? Ist mein Ansatz falsch?

Können Sie den code für Ihre onStartCommand ?
Natürlich, was Sie tun, ist das: Ergebnis.getInstance().setResult(mMediaPlayer.getCurrentPosition()); wo mMediaPlayer ist ein MediaPlayer-Objekt 😉
Nur zu überqueren überprüfen, haben Sie erklärt, der service im manifest? Was Basisklasse Ihre Dienste erweitert Service oder IntentService oder ein anderer?
Es erstreckt sich Service und es wird erklärt 🙂

InformationsquelleAutor user1315621 | 2012-09-04

Schreibe einen Kommentar