繁体   English   中英

Android 8+ - 如何在 android 中以编程方式连接到 wifi 网络?

[英]Android 8+ -How to connect to wifi network programmatically in android?

working with Android 8+ using Android Studio 3.6.3 with api target 29, Below code reflects the use of setting user's added wifi configuration, which establishes the connection between the two devices and keep it alive until user disconnects any one of them, below code尝试获取数据输入并尝试连接到给定的配置,但是在运行应用程序时,我得到了 class java.lang.NoClassDefFoundError。

import androidx.annotation.RequiresApi;
import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.net.MacAddress;
import android.net.wifi.WifiManager;
import android.net.wifi.WifiNetworkSuggestion;
import android.os.Build;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Button;

import java.util.Collections;

public class MainActivity extends AppCompatActivity {
    EditText etssid, etpass;
    Button btconnect;
    String id, pass;
    Context context = this;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        etssid = findViewById(R.id.etssid);
        etpass = findViewById(R.id.etpass);
        btconnect = findViewById(R.id.btnconnect);

        btconnect.setOnClickListener(new View.OnClickListener() {
            @RequiresApi(api = Build.VERSION_CODES.P)
            @Override
            public void onClick(View v) {
                id = etssid.getText().toString();
                pass = etpass.getText().toString();
                final WifiNetworkSuggestion conf = new WifiNetworkSuggestion.Builder()
                        .setBssid(MacAddress.fromString(id))
                        .setWpa2Passphrase(pass)
                        .setIsAppInteractionRequired(false)
                        .build();
                final WifiManager wifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
                final int status = wifiManager.addNetworkSuggestions(Collections.singletonList(conf));
                if(status != WifiManager.STATUS_NETWORK_SUGGESTIONS_SUCCESS)
                {
                    //error handling
                }
            }
        });
    }
}

在按下连接按钮时显示以下错误,而 deb

E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.client, PID: 6553
    java.lang.NoClassDefFoundError: Failed resolution of: Landroid/net/wifi/WifiNetworkSuggestion$Builder;
        at com.example.client.MainActivity$1.onClick(MainActivity.java:38)
        at android.view.View.performClick(View.java:6294)
        at android.view.View$PerformClick.run(View.java:24774)
        at android.os.Handler.handleCallback(Handler.java:790)
        at android.os.Handler.dispatchMessage(Handler.java:99)
        at android.os.Looper.loop(Looper.java:164)
        at android.app.ActivityThread.main(ActivityThread.java:6518)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)
     Caused by: java.lang.ClassNotFoundException: Didn't find class "android.net.wifi.WifiNetworkSuggestion$Builder" on path: DexPathList[[zip file "/data/app/com.example.client-YUhhKlGEU_94ZLx0o-xLOA==/base.apk"],nativeLibraryDirectories=[/data/app/com.example.client-YUhhKlGEU_94ZLx0o-xLOA==/lib/arm64, /system/lib64, /system/vendor/lib64]]
        at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:125)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
        at com.example.client.MainActivity$1.onClick(MainActivity.java:38) 
        at android.view.View.performClick(View.java:6294) 
        at android.view.View$PerformClick.run(View.java:24774) 
        at android.os.Handler.handleCallback(Handler.java:790) 
        at android.os.Handler.dispatchMessage(Handler.java:99) 
        at android.os.Looper.loop(Looper.java:164) 
        at android.app.ActivityThread.main(ActivityThread.java:6518) 
        at java.lang.reflect.Method.invoke(Native Method) 
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:438) 
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:807)ugging,

这是因为 API 添加到 SDK 29 中,如下所示:

https://developer.android.com/reference/android/net/wifi/WifiNetworkSuggestion

它根本不存在于 < 29。如果您将 SDK 降低到目标 28,它也不会在 class 中找到您的导入。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM