2015-05-05 15 views
5

Sto sviluppando un'applicazione Android. Devo risolvere il problema riportato di seguito nella mia domanda:Ottieni la data effettiva di un dispositivo in modalità offline

1) L'applicazione può funzionare sia online che offline. L'app ha una funzione per creare e salvare i NOTE all'interno dell'applicazione. Inoltre, quando l'app ottiene una connessione Internet, devo inviare le NOTE al server di back-end. Ho un campo chiamato 'DateCreated' in ogni nota (il datetime in cui è stato creato l'NOTA reale)

NUMERO: Se l'utente ha impostato il DateTime torto nel dispositivo, La mia applicazione invia il DATETIME non corretta al server . Mi chiedo come potrei risolvere il problema? Qualsiasi idea sarebbe apprezzabile.

+1

puoi pubblicare qui il tuo codice .. –

+0

Siamo spiacenti, non è correlato al codice. Ho bisogno di una logica per implementare l'usecase –

+0

Qual è il problema dell'invio di un datetime che riflette ciò che l'utente ha sul suo dispositivo? – laalto

risposta

3

Quando alla fine pubblichi sul tuo server, aggiungi solo quello specifico orario. new Date().getTime() ti fornirà un valore che puoi utilizzare per confrontare con il datetime del tuo server. Se è per esempio 2 ore dopo, quindi basta impostare l'ora del post di 2 ore indietro.

Quindi inviare sia l'ora in cui il messaggio è stato inviato dall'utente sia l'ora in cui è stata effettivamente inviata.

+1

Grazie. Potrebbero verificarsi problemi Se l'utente modifica l'ora del dispositivo dopo aver creato la NOTA. Qualche altra soluzione per risolvere questo caso? –

+2

Non riesco a trovare un callback o una sorta di listener che avvisi le impostazioni del dispositivo. Potresti comunque eseguire un Servizio che controlla ogni paio di secondi (diciamo 30) se l'ora è uguale a oldTime + 30 e continua da lì, ma questo potrebbe diventare un vero e proprio overkill – dumazy

+1

Sì. Mi sento lo stesso. Non penso che altre soluzioni disponibili. –

0

È possibile ottenere la data e l'ora correnti utilizzando il tempo di rete.

LocationManager locManager = (LocationManager) mContext 
      .getSystemService(mContext.LOCATION_SERVICE); 
    long lastSyncTime = locManager.getLastKnownLocation(
      LocationManager.NETWORK_PROVIDER).getTime(); 

L'ho usato per ottenere il tempo, in base alla posizione nella mia applicazione. Penso che funzionerà anche in modalità online e offline.

+1

Cosa succede se è un tablet con solo wifi? –

+0

Come per l'ultima posizione quando si è connessi a Internet, mostra l'ora. È necessaria anche questa autorizzazione: android.Manifest.permission # ACCESS_FINE_LOCATION –

+1

Questo è solo il momento in cui hai ricevuto l'ultimo aggiornamento della posizione. Internamente ottiene l'ora esattamente nello stesso modo in cui si farebbe con 'new Date(). GetTime()' o 'System.currentTimeInMillis()'. Quindi, se un utente ha cambiato le impostazioni della data del dispositivo, sarà comunque sbagliato – dumazy

Problemi correlati