Я работаю над плагином флаттера, который подключается к указанному c Wi-Fi. Поскольку мой targetSdkVersion
равен 29
, а класс WifiConfiguuration
устарел, и я даже не могу использовать несколько методов класса WifiManager
, поэтому я должен использовать WifiNetworkSpecifier
. Теперь проблема в том, что приложение работает нормально на Android 10 (проверено на Realme RMX1851, Redmi Note 8 Pro), но оно не работает на Android 6.0 (Vivo v5). Я получаю ClassNotFoundException, а затем приложение вылетает, вот мой код: -
void connect() {
if (!wifiManager.isWifiEnabled()) {
result.error("WIFI_TURNED_OFF", "Wifi Adapter is Offline", "Please Turn on the wifi adapter");
return;
}
WifiNetworkSpecifier.Builder builder = new WifiNetworkSpecifier.Builder()
.setSsidPattern(new PatternMatcher(ssid, PatternMatcher.PATTERN_PREFIX))
.setWpa2Passphrase(password);
WifiNetworkSpecifier wifiNetworkSpecifier = builder.build();
NetworkRequest.Builder networkRequestBuilder = new NetworkRequest.Builder()
.addTransportType(NetworkCapabilities.TRANSPORT_WIFI)
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
.addCapability(NetworkCapabilities.NET_CAPABILITY_TRUSTED)
.setNetworkSpecifier(wifiNetworkSpecifier.toString());
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
networkRequestBuilder.setNetworkSpecifier(wifiNetworkSpecifier);
}
NetworkRequest networkRequest = networkRequestBuilder.build();
ConnectivityManager cm = (ConnectivityManager) context.getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
if (cm != null) {
cm.requestNetwork(networkRequest, new ConnectivityManager.NetworkCallback() {
@Override
public void onAvailable(@NonNull Network network) {
Log.e("WIFIDelegate", "available");
super.onAvailable(network);
}
@Override
public void onUnavailable() {
Log.e("WIFIDelegate", "Not available");
super.onUnavailable();
}
});
} else {
result.error("Connectivity_Manager_Not_Available", "Connectivity Manager is not available", "Connectivity Manager is not available");
}
И ошибка
[ERROR:flutter/shell/platform/android/platform_view_android_jni.cc(39)] java.lang.NoClassDefFoundError: Failed resolution of: Landroid/net/wifi/WifiNetworkSpecifier$Builder;
E/flutter (18197): at com.akaalapps.wifi_connect.WifiDelegate.connect(WifiDelegate.java:47)
E/flutter (18197): at com.akaalapps.wifi_connect.WifiConnectPlugin.connectToWifi(WifiConnectPlugin.java:177)
E/flutter (18197): at com.akaalapps.wifi_connect.WifiConnectPlugin.onMethodCall(WifiConnectPlugin.java:78)
E/flutter (18197): at io.flutter.plugin.common.MethodChannel$IncomingMethodCallHandler.onMessage(MethodChannel.java:231)
E/flutter (18197): at io.flutter.embedding.engine.dart.DartMessenger.handleMessageFromDart(DartMessenger.java:93)
E/flutter (18197): at io.flutter.embedding.engine.FlutterJNI.handlePlatformMessage(FlutterJNI.java:642)
E/flutter (18197): at android.os.MessageQueue.nativePollOnce(Native Method)
E/flutter (18197): at android.os.MessageQueue.next(MessageQueue.java:328)
E/flutter (18197): at android.os.Looper.loop(Looper.java:164)
E/flutter (18197): at android.app.ActivityThread.main(ActivityThread.java:5790)
E/flutter (18197): at java.lang.reflect.Method.invoke(Native Method)
E/flutter (18197): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1015)
E/flutter (18197): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:876)
E/flutter (18197): Caused by: java.lang.ClassNotFoundException: Didn't find class "android.net.wifi.WifiNetworkSpecifier$Builder" on path: DexPathList[[zip file "/data/app/com.akaalapps.wifi_connect_example-1/base.apk"],nativeLibraryDirectories=[/data/app/com.akaalapps.wifi_connect_example-1/lib/arm64, /data/app/com.akaalapps.wifi_connect_example-1/base.apk!/lib/arm64-v8a, /vendor/lib64, /system/lib64]]
E/flutter (18197): at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:56)
E/flutter (18197): at java.lang.ClassLoader.loadClass(ClassLoader.java:511)
E/flutter (18197): at java.lang.ClassLoader.loadClass(ClassLoader.java:469)
E/flutter (18197): ... 13 more
E/flutter (18197): Suppressed: java.lang.ClassNotFoundException: android.net.wifi.WifiNetworkSpecifier$Builder
E/flutter (18197): at java.lang.Class.classForName(Native Method)
E/flutter (18197): at java.lang.BootClassLoader.findClass(ClassLoader.java:781)
E/flutter (18197): at java.lang.BootClassLoader.loadClass(ClassLoader.java:841)
E/flutter (18197): at java.lang.ClassLoader.loadClass(ClassLoader.java:504)
E/flutter (18197): ... 14 more
E/flutter (18197): Caused by: java.lang.NoClassDefFoundError: Class not found using the boot class loader; no stack trace available
E/flutter (18197):
F/flutter (18197): [FATAL:flutter/shell/platform/android/platform_view_android_jni.cc(76)] Check failed: CheckException(env).
F/libc (18197): Fatal signal 6 (SIGABRT), code -6 in tid 18197 (connect_example)
Lost connection to device.```