2014-10-18 19 views
28

Sto costruendo un'applicazione Android, che fa uso di un ricevitore broadcast manifest per sapere quando il dispositivo è collegato. Penso che l'API JobScheduler di Android 5.0 sarebbe un modo molto migliore per farlo, ma ho una domanda: è possibile utilizzare questa API o una simile su versioni precedenti di Android? Se non è possibile, quale sarebbe l'opzione migliore per farlo (invece di un ricevitore broadcast manifest)?API 5.0 JobScheduler per Android su versioni precedenti?

risposta

8

penso che Android 5.0 JobScheduler API sarebbe un modo molto migliore di fare questo

Beh, questo dipende da quello che "questo" è. Sapere semplicemente quando il dispositivo è collegato è inutile a meno che non si abbia intenzione di fare qualcosa con quella informazione, e non sappiamo cosa avete in mente.

Ricordare che lo JobScheduler non ti dà necessariamente il controllo quando il dispositivo è collegato. Piuttosto, usa questo fatto, oltre al tuo JobInfo e ad altri fattori ambientali, per determinare quando dare il controllo.

è possibile utilizzare questa API o una simile su versioni precedenti di Android?

Non esiste un backport di JobScheduler fornito da Android SDK in questo momento. Mentre qualcuno probabilmente scriverà un backport a un certo punto, non sono a conoscenza di uno disponibile come open source al momento.

Se non è possibile, quale sarebbe l'opzione migliore per farlo (invece di un ricevitore broadcast manifest)?

Di nuovo, dipende da cosa "questo" è veramente. Ad esempio, se si sta tentando di dire "Voglio ottenere il controllo ogni tanto, ma solo se il dispositivo è collegato", è possibile utilizzare AlarmManager, quindi verificare se il dispositivo è collegato prima di continuare il lavoro.

+0

Grazie! Voglio semplicemente fare un po 'di lavoro mentre il telefono è in carica, per ridurre il consumo della batteria. Il lavoro è fatto all'interno di IntentService – fergaral

+0

@ user3194230: Questo sembra sicuramente un buon uso di 'JobScheduler' (anche se per questo dovresti passare a' JobService'). Puoi forse [usare 'ACTION_POWER_CONNECTED'] (http://developer.android.com/reference/android/content/Intent.html#ACTION_POWER_CONNECTED) nel frattempo, però - Avevo dimenticato di quella trasmissione quando ho scritto la mia risposta . – CommonsWare

+0

Sì. In questo momento sto usando un BroadcastReceiver manifest che ascolta la trasmissione ACTION_POWER_CONNECTED. Sul mio Nexus 5 con Android 4.4.4 funziona come previsto, ma non ho potuto farlo funzionare sul Samsung Galaxy S del mio amico (con Android 2.3.6). Ho provato ad ascoltare la trasmissione ACTION_BATTERY_CHANGED e funziona sia nel mio telefono che in quello di un mio amico, ma questa trasmissione richiede che la mia app sia sempre in esecuzione – fergaral

17

Aggiornamento:

Firebase JobDispatcher è stato introdotto in sostituzione di seguito.


Aggiornamento:

In Play Services 7.5 GCM Network Manager è stato introdotto.

Questa è l'approssimazione più vicina per un backport dell'API di JobSchedulers.


Evant utente su Github sta creando un Compat version of the JobScheduler API.

Al momento del distacco non è pronto per la produzione, ma è degno di nota

+0

.. e ha rinunciato a mantenerlo .. – Ewoks

+1

Ma poi Google ha introdotto https://developers.google.com/cloud-messaging/network-manager – Tobrun

+0

Penso che questo dovrebbe essere contrassegnato come risposta corretta. – sealskej

21

Un'altra opzione è questa libreria: https://github.com/evernote/android-job

Esso utilizza il JobScheduler e GcmNetworkManager se possibile. In caso contrario, fallbacks allo AlarmManager.Gestisce anche diversi livelli API con il AlarmManager correttamente. Questo blog post offre una panoramica.

(PS:. Io sono il principale sviluppatore che ha lavorato a questa libreria in Evernote E 'utile per i nostri progetti, è per questo che ho voluto condividere qui pure)

+0

ottimo lavoro uomo, adoro questa libreria. Sfortunatamente non c'è molta documentazione a riguardo e non sono sicuro di non essere sicuro della configurazione del lavoro. – Nativ

+0

In realtà, non dovresti preoccuparti troppo della configurazione. La documentazione su Github spiega tutto ciò che è necessario. Anche creare un vero lavoro non è difficile. Crea la tua classe di lavoro e pianificala con il Builder, che fornisce alcuni parametri facili da usare. – vRallev

0

sono imbattuto in questa biblioteca, non provate, ma sembra buona per ciò che si vuole: https://github.com/airk000/Trigger

Evernote Android-lavoro potrebbe essere una soluzione migliore però :)

Problemi correlati