Wie kann ich startIntentSenderForResult im Service richtig aufrufen?

8

Ich arbeite an einem Service , das einen Standort erhält und die Google Play-Dienste dafür verwendet.

Nach Ссылка , wenn hasResolution() gibt true zurück und ruft startResolutionForResult auf, um einen Fehler zu beheben. Aber es benötigt einen Activity als ersten Parameter.

Natürlich ConnectionResult gibt PendingIntent by zurück getResolution() , aber die Service hat kein startIntentSenderForResult() wie ein Activity .
Soweit ich weiß, gibt es keine Möglichkeit, ein Ergebnis zurück in Service zu bekommen.

Wie kann ich ein Ergebnis in Service erhalten? Oder gibt es einen anderen richtigen Weg?

Bearbeiten:

Das Google Play Service SDK bietet GooglePlayServicesUtil.showErrorNotification für Hintergrundaufgaben. Natürlich ist die angenommene Antwort eine gute Lösung.

Bearbeiten 2:

showErrorNotification ist nur für einen Rückgabewert von isGooglePlayServicesAvailable .

    
khris 14.05.2014, 07:58
quelle

1 Antwort

2

Ich würde so vorgehen:

  1. Zeigt eine Benachrichtigung an, die darauf hinweist, dass bei Aufgabe X ein Problem aufgetreten ist (Interaktion mit Google Play Services, aber Sie können etwas anderes sagen spezifischer für Ihre App).

  2. Geben Sie für diese Benachrichtigung einen PendingIntent ein, der Ihre Aktivität startet. Als Teil der Extras für diesen PendingIntent übergibt den von ConnectionResult.getResolution() bereitgestellten PendingIntent. PendingIntents sind parzellierbar, daher sollte dies kein Problem darstellen.

  3. Erhalte in onCreate() für diese Aktivität das Original PendingIntent von den Extras und rufe dann startIntentSenderForResult() damit auf. Dadurch wird der Nutzer automatisch dorthin weitergeleitet, wo er von Google Play Services benötigt wird (möglicherweise anmelden?)

  4. Beenden Sie dann in onActivityResult() die Aktivität, nachdem Sie Ihren Dienst (über eine Absicht) benachrichtigt haben, dass das Problem gelöst wurde (oder nicht). Die vorübergehende Aktivität ist für den Benutzer unsichtbar gewesen.

Ich gebe zu, diese Lösung ist theoretisch, aber es sollte funktionieren.

    
matiash 25.05.2014, 07:33
quelle