setWifiApEnabled:NoSuchMethod

问题描述 投票:0回答:1

我一直在尝试遵循本教程,了解如何以编程方式在 Android 上配置和启动 Wi-Fi 热点。这是我的主要活动文件:

package com.example.test;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.util.Log;

import java.lang.reflect.Method;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        WifiManager wifiManager = (WifiManager)getApplicationContext().getSystemService(Context.WIFI_SERVICE);

        WifiConfiguration configuration = new WifiConfiguration();
        configuration.SSID = "MyNetwork";
        configuration.preSharedKey = "password";
        configuration.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.SHARED);
        configuration.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        configuration.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
        configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        wifiManager.setWifiEnabled(false);

        try {
            Method method = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
            if ( (boolean)method.invoke(wifiManager, configuration, true) ) {
                Log.i("MyApp", "Hotspot started");
            }
            else {
                Log.e("MyApp", "Failed to start hotspot");
            }
        }
        catch (Exception e) {
            Log.e("MyApp", "Well, bugger");
            e.printStackTrace();
        }
    }
}

我给了我的应用程序

ACCESS_WIFI_STATE
CHANGE_WIFI_STATE
权限。但是,当我在模拟 Pixel 3 (API 28) 上构建并运行它时,
Method method= ...
行会导致应用程序崩溃并显示

java.lang.NoSuchMethodException: setWifiApEnabled [class android.net.wifi.WifiConfiguration, boolean]
    at java.lang.Class.getMethod(Class.java:2068)
    at java.lang.Class.getMethod(Class.java:1690)
    at com.example.testjava.MainActivity.onCreate(MainActivity.java:32)
    at android.app.Activity.performCreate(Activity.java:7136)
    at android.app.Activity.performCreate(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage(Handler.java:106)
    at android.os.Looper.loop(Looper.java:193)
    at android.app.ActivityThread.main(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke(Native Method)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)

WifiManager.setWifiApEnabled
似乎存在并采用指定的参数。我在这里缺少什么?

java android wifi hotspot
1个回答
0
投票

新API,新方法: 启动SoftAp(WiFi配置) 停止SoftAp()

© www.soinside.com 2019 - 2024. All rights reserved.