Sie benötigen einen BroadcastReceiver zu verwenden, um zu hören Änderungsereignisse zu vernetzen. Definieren Sie einen BroadcastReciver in Ihrer AndroidManifest.xml mit der folgenden Aktion.
<receiver android:name=".NetworkBroadcastReceiver" >
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
</intent-filter>
</receiver>
Auch die folgenden Berechtigungen auch auf Ihre Manifest-Datei hinzufügen -
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
NetworkBroadcastReceiver -
public class NetworkBroadcastReceiver extends BroadcastReceiver {
@Override
public void onReceive(final Context context, final Intent intent) {
if(isInternetConnected(context)) {
//Do something i.e. trigger an API call or start a IntentService etc.
}
}
public boolean isInternetConnected(Context context) {
ConnectivityManager connectivityManager
= (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
return activeNetworkInfo != null && activeNetworkInfo.isConnected();
}
}
Das ist alles, was Sie tun müssen, um einen Antrag zu machen, sobald Sie bekommen Internet.
Um Daten zwischenzuspeichern, empfehle ich Ihnen, die Serverantwort zu analysieren und in Ihrer Datenbank zur Offline-Verwendung zu speichern. Jedes Mal, wenn Sie eine erfolgreiche Anfrage machen, speichern Sie die neuen Daten in der Datenbank und verwerfen Sie die alte. Wenn der Benutzer die App startet, lade zuerst die Daten aus der Datenbank und dann die Volley-Anfrage, wenn die Anfrage erfolgreich wird, dann lade die neuen Daten in die App, speichere sie in der Datenbank und entferne die alte. Wenn die Anfrage fehlschlägt, kann der Benutzer die alten Daten der vorherigen erfolgreichen Anfrage weiterhin sehen.
Um Inkonsistenzen zwischen Daten in App und Server zu behandeln, müssen Sie SyncAdapter verwenden. SyncAdapter bietet eine großartige Unterstützung für die periodische Synchronisierung im Hintergrund. Fügen Sie einfach den Synchronisierungscode in die onPerformSync() - Methode von SyncAdapter ein. Es funktioniert möglicherweise nicht in folgenden zwei Szenarien - 1. Wenn Benutzer nicht mit dem Internet verbunden ist 2.Wenn das Benutzergerät ausgeschaltet ist
Um dieses Szenario zu behandeln, verwenden Sie den BroadCastReceiver, der oben in meiner Antwort erläutert wurde, um den SyncAdapter auszulösen. Fügen Sie Ihrem Empfänger in AndroidManifest.xml die folgenden Aktionen hinzu, um das Boot-Complete-Ereignis des Geräts anzuhören.
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.QUICKBOOT_POWERON" />
Lassen Sie mich wissen, wenn Sie mehr eingehende Erklärung mit Codierungsbeispiel benötigen. Hoffe, es hilft
Über persistent Service, haben Sie gelesen [diese Frage] (http://stackoverflow.com/questions/4708827/persistent-service) noch – BNK
Ja, ich wollte, aber ich möchte wissen, ob es etwas weniger generische:) –
Sie können in [RobospiceRetrofit] (https://github.com/stephanenicolas/robospice) Bibliothek suchen ... Es verwendet Dienste, um eine Anfrage an den Server zu senden, und Sie können Daten aus dem Cache abrufen, wenn die App offline ist. Aber ich denke, dass der Service zerstört wird, wenn Sie die App verlassen. Hoffe es hilft ... –