diff options
author | Ivo van Dongen <info@ivovandongen.nl> | 2016-09-08 17:53:00 +0200 |
---|---|---|
committer | Ivo van Dongen <info@ivovandongen.nl> | 2016-09-23 10:47:54 +0200 |
commit | 742d6d827567608f94b0743b7bac5dbef94724e3 (patch) | |
tree | b42d617cf2e8ac60f7a91b339ef3fccccca02043 /platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java | |
parent | 3ddb8dfc86753120d2ea2c3befdf2430c1c56562 (diff) | |
download | qtlocation-mapboxgl-742d6d827567608f94b0743b7bac5dbef94724e3.tar.gz |
[android] set connectivity state pro-actively
Diffstat (limited to 'platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java')
-rw-r--r-- | platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java | 88 |
1 files changed, 88 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java new file mode 100644 index 0000000000..823f463030 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDK/src/main/java/com/mapbox/mapboxsdk/net/ConnectivityReceiver.java @@ -0,0 +1,88 @@ +package com.mapbox.mapboxsdk.net; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.net.ConnectivityManager; +import android.net.NetworkInfo; +import android.support.annotation.NonNull; +import android.util.Log; + +import java.util.List; +import java.util.concurrent.CopyOnWriteArrayList; + +/** + * Interface definition for a callback to be invoked when connectivity changes. + * Not public api. + */ +public class ConnectivityReceiver extends BroadcastReceiver { + private static final String TAG = ConnectivityReceiver.class.getSimpleName(); + private static ConnectivityReceiver INSTANCE; + + /** + * Get or create the singleton instance + */ + public static synchronized ConnectivityReceiver instance(Context context) { + if (INSTANCE == null) { + //Register new instance + INSTANCE = new ConnectivityReceiver(); + context.registerReceiver(INSTANCE, new IntentFilter("android.net.conn.CONNECTIVITY_CHANGE")); + + //Add default listeners + INSTANCE.addListener(new NativeConnectivityListener()); + } + + return INSTANCE; + } + + private List<ConnectivityListener> listeners = new CopyOnWriteArrayList<>(); + + private ConnectivityReceiver() { + } + + /** + * @see BroadcastReceiver#onReceive(Context, Intent) + */ + @Override + public void onReceive(Context context, Intent intent) { + boolean connected = isConnected(context); + Log.v(TAG, "Connected: " + connected); + + //Loop over listeners + for (ConnectivityListener listener : listeners) { + listener.onNetworkStateChanged(connected); + } + } + + /** + * Add a listener to be notified + * + * @param listener the listener to add + */ + public void addListener(@NonNull ConnectivityListener listener) { + listeners.add(listener); + } + + /** + * Remove a listener + * + * @param listener the listener to remove + */ + public void removeListener(@NonNull ConnectivityListener listener) { + listeners.remove(listener); + } + + /** + * Get current connectivity state + * + * @param context current Context + * @return true if connected + */ + public boolean isConnected(Context context) { + ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); + NetworkInfo activeNetwork = cm.getActiveNetworkInfo(); + return (activeNetwork != null && activeNetwork.isConnected()); + } + +} |