2014-10-18 7 views
28

Ich baue eine Android-Anwendung, die einen Manifest Broadcast Empfänger verwendet, um zu wissen, wenn das Gerät eingesteckt ist. Ich denke Android 5.0 JobScheduler API wäre eine viel bessere Möglichkeit, dies zu tun, aber ich habe eine Frage: Ist es möglich, diese API oder eine ähnliche in früheren Versionen von Android zu verwenden? Wenn es nicht möglich ist, was wäre die beste Option (anstelle eines Manifest-Broadcast-Empfängers)?Android 5.0 JobScheduler API auf früheren Versionen?

Antwort

8

Ich denke, Android 5.0 Jobscheduler API eine viel bessere Möglichkeit, dies zu tun

Nun wäre, das hängt davon ab, was „das“ ist. Einfach zu wissen, wann das Gerät angeschlossen ist, ist sinnlos, es sei denn, Sie werden etwas mit diesen Informationen tun, und wir wissen nicht, was Sie im Sinn haben.

Denken Sie daran, dass JobScheduler nicht unbedingt die Kontrolle gibt, wenn das Gerät angeschlossen ist. Vielmehr verwendet es diese Tatsache, plus Ihre JobInfo und andere Umweltfaktoren, um festzustellen, wann Sie die Kontrolle geben.

ist es möglich, diese API oder eine ähnliche in früheren Versionen von Android zu verwenden?

Es gibt derzeit keinen Backport von JobScheduler, der vom Android SDK bereitgestellt wird. Während jemand wahrscheinlich irgendwann einen Backport schreiben wird, ist mir auch keiner von beiden als Open Source bekannt.

Wenn es nicht möglich ist, was wäre die beste Option (anstelle eines Manifest-Broadcast-Empfängers)?

Wieder hängt es davon ab, was "das" wirklich ist. Wenn Sie beispielsweise versuchen, "Ich möchte die Kontrolle immer wieder erhalten, aber nur wenn das Gerät angeschlossen ist", können Sie AlarmManager verwenden und dann überprüfen, ob das Gerät angeschlossen ist, bevor Sie mit Ihrer Arbeit fortfahren.

+0

Thank you! Ich möchte einfach nur etwas arbeiten, während das Telefon auflädt, um den Batterieverbrauch zu reduzieren. Die Arbeit ist in einem IntentService erledigt – fergaral

+0

@ user3194230: Das klingt definitiv nach einem guten Anwendungsfall für 'JobScheduler' (obwohl Sie dafür zu einem' JobService' wechseln müssten). Sie können vielleicht [ACTION_POWER_CONNECTED'] (http://developer.android.com/reference/android/content/Intent.html#ACTION_POWER_CONNECTED) in der Zwischenzeit verwenden, obwohl - ich hatte diese Sendung vergessen, als ich meine Antwort schrieb . – CommonsWare

+0

Ja. Im Moment benutze ich einen Manifest BroadcastReceiver, der auf ACTION_POWER_CONNECTED Broadcast wartet. Auf meinem Nexus 5 mit Android 4.4.4 funktioniert es wie erwartet, aber ich habe es nicht auf dem Samsung Galaxy S meines Freundes (mit Android 2.3.6) funktioniert. Ich habe versucht, auf die ACTION_BATTERY_CHANGED-Sendung zu hören, und sie funktioniert sowohl in meinem Telefon als auch in meinem Freund, aber diese Übertragung erfordert, dass meine App die ganze Zeit läuft – fergaral

17

Update:

Firebase JobDispatcher wurde unter ersetzen eingeführt.


Update:

In Play Services 7.5 GCM Network Manager eingeführt.

Dies ist die engste Annäherung für einen Backport der JobSchedulers API.


Evant Benutzer auf Github erstellt eine Compat version of the JobScheduler API.

Zum Zeitpunkt nicht Produktion bereit der Entsendung ist, aber es lohnt sich

+0

..und er gab auf, es beizubehalten .. – Ewoks

+1

Aber dann stellte Google https://developers.google.com/cloud-messaging/network-manager – Tobrun

+0

vor Ich denke, dass das als richtige Antwort markiert werden sollte. – sealskej

21

Eine weitere Möglichkeit zu erwähnen, ist diese Bibliothek: https://github.com/evernote/android-job

Es nutzt die JobScheduler und GcmNetworkManager, wenn möglich. Ansonsten fällt es auf die AlarmManager zurück.Es behandelt auch verschiedene API-Ebenen mit der AlarmManager richtig. Diese blog post gibt Ihnen einen Überblick.

(PS:. Ich bin der Haupt-Entwickler, der bei Evernote auf diese Bibliothek arbeitete es für unsere Projekte nützlich ist, deshalb wollte ich es hier teilen, wie gut)

+0

toller Job Mann, ich liebe diese Bibliothek. Leider gibt es nicht viel Dokumentation darüber und ich bin oft nicht sicher über die Konfiguration des Jobs. – Nativ

+0

Eigentlich sollte man sich nicht viel um die Konfiguration kümmern. Die Dokumentation auf Github erklärt alles, was benötigt wird. Auch das Erstellen eines aktuellen Jobs ist nicht schwer. Erstellen Sie Ihre Job-Klasse und planen Sie sie mit dem Builder, der einige benutzerfreundliche Parameter bietet. – vRallev

Verwandte Themen