在安卓系统中创建WiFi热点配置

8

我正在使用 Android 4.1.1……我正在开发一个应用程序,允许用户使用Wifi热点创建自己的网络,然后客户端可以连接并共享数据。我已经在Android上成功创建了Wifi热点,但是我无法为此目的配置它。有没有办法通过编码来配置Android上的Wifi热点?


请查看我为您的回复。 - gumuruh
2个回答

16

本答案可能已过时!

if(wifiManager.isWifiEnabled())
{
    wifiManager.setWifiEnabled(false); 
}

WifiConfiguration netConfig = new WifiConfiguration();

netConfig.SSID = "MyAP";
netConfig.allowedAuthAlgorithms.set(WifiConfiguration.AuthAlgorithm.OPEN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
netConfig.allowedProtocols.set(WifiConfiguration.Protocol.WPA);
netConfig.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

try{
    Method setWifiApMethod = wifiManager.getClass().getMethod("setWifiApEnabled", WifiConfiguration.class, boolean.class);
    boolean apstatus=(Boolean) setWifiApMethod.invoke(wifiManager, netConfig,true);

    Method isWifiApEnabledmethod = wifiManager.getClass().getMethod("isWifiApEnabled"); 
    while(!(Boolean)isWifiApEnabledmethod.invoke(wifiManager)){};
    Method getWifiApStateMethod = wifiManager.getClass().getMethod("getWifiApState"); 
    int apstate=(Integer)getWifiApStateMethod.invoke(wifiManager);
    Method getWifiApConfigurationMethod = wifiManager.getClass().getMethod("getWifiApConfiguration");
    netConfig=(WifiConfiguration)getWifiApConfigurationMethod.invoke(wifiManager);
    Log.e("CLIENT", "\nSSID:"+netConfig.SSID+"\nPassword:"+netConfig.preSharedKey+"\n");

} catch (Exception e) {
    Log.e(this.getClass().toString(), "", e);
}

这个Wifi热点有没有setWifiApConfiguration函数,以便我可以使用代码连接到自定义的wifi接入点? - zionpi
不支持Android 6及以上版本和5.1以上版本。我已经添加了ACTION_MANAGE_WRITE_SETTINGS权限,但仍然出现错误,错误信息为“在softap启动时抛出异常java.lang.IllegalStateException: command '2707 softap set wlan0 ....”。 - AkshayT
@AkshayTaru 毫不意外!当时我回答的时候,最新版本的安卓是5.0,希望您能更新回答。 - mizdler

0

这里是一个可能的解决方案:

private WifiManager.LocalOnlyHotspotReservation mReservation;

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

wifiManager.startLocalOnlyHotspot(new WifiManager.LocalOnlyHotspotCallback() {

        @Override
        public void onStarted(WifiManager.LocalOnlyHotspotReservation reservation) {
            super.onStarted(reservation);
            mReservation = reservation;
        }

        @Override
        public void onStopped() {
            super.onStopped();
        }

        @Override
        public void onFailed(int reason) {
            super.onFailed(reason);
        }
    }, new Handler());

虽然这段代码可能回答了问题,但是提供关于为什么和/或如何回答问题的额外上下文可以提高其长期价值。 - double-beep

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接