import 'package:connectivity/connectivity.dart';
var connectivityResult = await (Connectivity().checkConnectivity());
if (connectivityResult == ConnectivityResult.mobile) {
// I am connected to a mobile network.
} else if (connectivityResult == ConnectivityResult.wifi) {
// I am connected to a wifi network.
}
import io.flutter.embedding.android.FlutterActivity
import io.flutter.embedding.engine.FlutterEngine
import io.flutter.plugin.common.MethodChannel
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import androidx.annotation.NonNull
import android.net.NetworkRequest
import android.content.Context
import android.net.Network
import android.os.Build
import android.util.Log
class MainActivity: FlutterActivity() {
private val channel = "ru.myPackageName.mobile/bindNetworkToWifi"
override fun configureFlutterEngine(@NonNull flutterEngine: FlutterEngine) {
super.configureFlutterEngine(flutterEngine)
MethodChannel(flutterEngine.dartExecutor.binaryMessenger, channel).setMethodCallHandler {
_, _ ->
bindNetworkToWifi()
}
}
private fun bindNetworkToWifi() {
val connectivityManager = getSystemService(Context.CONNECTIVITY_SERVICE) as ConnectivityManager
val builder = NetworkRequest.Builder()
builder.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
builder.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
builder.removeCapability(NetworkCapabilities.NET_CAPABILITY_INTERNET)
connectivityManager.requestNetwork(builder.build(), object : ConnectivityManager.NetworkCallback() {
override fun onAvailable(network: Network) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
connectivityManager.bindProcessToNetwork(network)
Log.d("Forced wifi usage", "onAvailable: true")
}
}
})
}
}
我在闪屏中调用的flutter代码
final platform = MethodChannel('ru.myPackageName.mobile/bindNetworkToWifi');
Future<void> _bindNetworkToWifi() async {
try {
platform.invokeMethod('bindNetworkToWifi');
debugPrint("seems to be working: 'bindNetworkToWifi'.");
} on PlatformException catch (e) {
debugPrint("Failed to force wifi usage: '${e.message}'.");
}
}
4条答案
按热度按时间ecr0jaav1#
Core Flutter框架还没有这个特性(而且至少在很长一段时间内不会有)。
当涉及到硬件相关的东西,你几乎可以说,本机代码是唯一的出路。好事情是有许多官方和第三方软件包已经为您做了这项工作。
例如,这个软件包是连接相关功能的热门软件包:https://pub.dev/packages/connectivity
这是您需要的示例代码:
6yoyoihd2#
有一个插件可以帮助您解决这个问题。
您需要将此https://github.com/alternadom/WiFiFlutter插件添加到您的项目中,如下所示:
然后强制使用wifi
我做了安全措施还加了站台检查
缺点是,当你第一次在应用程序中这样做时,用户将被重定向,允许应用程序更改系统设置(从那里开始,“后退”导航按钮暂时不起作用)。
vh0rcniy3#
这在flutter上是不可能的,唯一的方法是通过paltform-channels使用平台原生代码。
https://flutter.dev/docs/development/platform-integration/platform-channels
ckocjqey4#
这个问题只在安卓设备上出现(在iOS设备上不会出现)。Eric是对的。你可以通过平台通道来实现这个问题。在你的项目中,你可以找到MainActivity.kt文件,它通常位于android -〉app -〉src -〉main -〉Kotlin
我想出了这个解决方案,你必须使用连接管理器绑定你的网络,并创建通道来调用它在你的flutter应用程序
我在闪屏中调用的flutter代码
更多信息请参见here