diff --git a/packages/connectivity/connectivity/CHANGELOG.md b/packages/connectivity/connectivity/CHANGELOG.md index bdc4dbc32e29..a42eaf0a359c 100644 --- a/packages/connectivity/connectivity/CHANGELOG.md +++ b/packages/connectivity/connectivity/CHANGELOG.md @@ -1,3 +1,8 @@ +## 0.4.9+4 + +* Update README with the updated information about WifiInfo on Android O or higher. +* Android: Avoiding uses or overrides a deprecated API + ## 0.4.9+3 * Keep handling deprecated Android v1 classes for backward compatibility. diff --git a/packages/connectivity/connectivity/README.md b/packages/connectivity/connectivity/README.md index f51be070d8f5..0a13749b9dc5 100644 --- a/packages/connectivity/connectivity/README.md +++ b/packages/connectivity/connectivity/README.md @@ -59,6 +59,14 @@ dispose() { Note that connectivity changes are no longer communicated to Android apps in the background starting with Android O. *You should always check for connectivity status when your app is resumed.* The broadcast is only useful when your application is in the foreground. +To successfully get WiFi Name or Wi-Fi BSSID starting with Android O, ensure all of the following conditions are met: + + * If your app is targeting Android 10 (API level 29) SDK or higher, your app has the ACCESS_FINE_LOCATION permission. + + * If your app is targeting SDK lower than Android 10 (API level 29), your app has the ACCESS_COARSE_LOCATION or ACCESS_FINE_LOCATION permission. + + * Location services are enabled on the device (under Settings > Location). + You can get wi-fi related information using: ```dart diff --git a/packages/connectivity/connectivity/android/build.gradle b/packages/connectivity/connectivity/android/build.gradle index b9b147b29b77..3542dbc6c01d 100644 --- a/packages/connectivity/connectivity/android/build.gradle +++ b/packages/connectivity/connectivity/android/build.gradle @@ -1,5 +1,6 @@ group 'io.flutter.plugins.connectivity' version '1.0-SNAPSHOT' +def args = ["-Xlint:deprecation","-Xlint:unchecked","-Werror"] buildscript { repositories { @@ -19,6 +20,10 @@ rootProject.allprojects { } } +project.getTasks().withType(JavaCompile){ + options.compilerArgs.addAll(args) +} + apply plugin: 'com.android.library' android { diff --git a/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/Connectivity.java b/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/Connectivity.java index 2d07641a42c1..dbf8e25eb7ad 100644 --- a/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/Connectivity.java +++ b/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/Connectivity.java @@ -100,4 +100,8 @@ private String getNetworkTypeLegacy() { return "none"; } } + + public ConnectivityManager getConnectivityManager() { + return connectivityManager; + } } diff --git a/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java b/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java index be8b47eff944..0c6554c0a5f7 100644 --- a/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java +++ b/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityBroadcastReceiver.java @@ -9,6 +9,11 @@ import android.content.Intent; import android.content.IntentFilter; import android.net.ConnectivityManager; +import android.net.Network; +import android.os.Build; +import android.os.Handler; +import android.os.Looper; +import androidx.annotation.RequiresApi; import io.flutter.plugin.common.EventChannel; /** @@ -24,6 +29,8 @@ class ConnectivityBroadcastReceiver extends BroadcastReceiver private Context context; private Connectivity connectivity; private EventChannel.EventSink events; + private Handler mainHandler = new Handler(Looper.getMainLooper()); + public static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE"; ConnectivityBroadcastReceiver(Context context, Connectivity connectivity) { this.context = context; @@ -33,12 +40,20 @@ class ConnectivityBroadcastReceiver extends BroadcastReceiver @Override public void onListen(Object arguments, EventChannel.EventSink events) { this.events = events; - context.registerReceiver(this, new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION)); + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + connectivity.getConnectivityManager().registerDefaultNetworkCallback(getNetworkCallback()); + } else { + context.registerReceiver(this, new IntentFilter(CONNECTIVITY_ACTION)); + } } @Override public void onCancel(Object arguments) { - context.unregisterReceiver(this); + if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) { + connectivity.getConnectivityManager().unregisterNetworkCallback(getNetworkCallback()); + } else { + context.unregisterReceiver(this); + } } @Override @@ -47,4 +62,30 @@ public void onReceive(Context context, Intent intent) { events.success(connectivity.getNetworkType()); } } + + @RequiresApi(api = Build.VERSION_CODES.N) + ConnectivityManager.NetworkCallback getNetworkCallback() { + return new ConnectivityManager.NetworkCallback() { + @Override + public void onAvailable(Network network) { + sendEvent(); + } + + @Override + public void onLost(Network network) { + sendEvent(); + } + }; + } + + private void sendEvent() { + Runnable runnable = + new Runnable() { + @Override + public void run() { + events.success(connectivity.getNetworkType()); + } + }; + mainHandler.post(runnable); + } } diff --git a/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java b/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java index 9acf64755ba8..f036a8aa15ae 100644 --- a/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java +++ b/packages/connectivity/connectivity/android/src/main/java/io/flutter/plugins/connectivity/ConnectivityPlugin.java @@ -41,7 +41,8 @@ private void setupChannels(BinaryMessenger messenger, Context context) { eventChannel = new EventChannel(messenger, "plugins.flutter.io/connectivity_status"); ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE); - WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE); + WifiManager wifiManager = + (WifiManager) context.getApplicationContext().getSystemService(Context.WIFI_SERVICE); Connectivity connectivity = new Connectivity(connectivityManager, wifiManager); diff --git a/packages/connectivity/connectivity/pubspec.yaml b/packages/connectivity/connectivity/pubspec.yaml index 95c9ec280394..691c683a84e0 100644 --- a/packages/connectivity/connectivity/pubspec.yaml +++ b/packages/connectivity/connectivity/pubspec.yaml @@ -5,7 +5,7 @@ homepage: https://github.com/flutter/plugins/tree/master/packages/connectivity/c # 0.4.y+z is compatible with 1.0.0, if you land a breaking change bump # the version to 2.0.0. # See more details: https://github.com/flutter/flutter/wiki/Package-migration-to-1.0.0 -version: 0.4.9+3 +version: 0.4.9+4 flutter: plugin: