【问题标题】:Connect to an open network with Android (Java)使用 Android (Java) 连接到开放网络
【发布时间】:2014-03-05 08:39:01
【问题描述】:

我查看了不同的帖子或网站来帮助我做一个可以连接到开放 wifi 网络(名称:OpenWrt)的应用程序。除非我之前手动连接,否则我无法连接该应用程序。有人可以调查一下并帮助我吗? :) 我可能应该将网络添加到手机上的网络列表中,但如果是问题,我不知道该怎么做。

谢谢!

package com.example.wificonnect;

import java.util.List;
import android.app.Activity;    
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.content.Context;

public class MainActivity extends Activity {

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

    // Définition du réseau wifi auquel on se connecte
    String networkSSID = "\"OpenWrt\"";

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

    // Configuration des paramètres de connexion
    WifiConfiguration conf = new WifiConfiguration();

    conf.SSID = networkSSID;                                                
    conf.wepTxKeyIndex = 0;
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    conf.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
    conf.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

    // Activation du wifi si pas encore activé
    if(wifiManager.isWifiEnabled()) {
        wifiManager.setWifiEnabled(false);
    }
    else {
        wifiManager.setWifiEnabled(true);
    }

    int netId = wifiManager.addNetwork(conf);
    wifiManager.enableNetwork(netId, true);
    wifiManager.setWifiEnabled(true);

  }
}

我还添加了权限:

 <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
 <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
 <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

编辑: 我应该在wifi激活后添加这样的东西吗?

int networkId = -1;
    if(wifiManager.getConfiguredNetworks() != null) {
        for (WifiConfiguration configuredNetwork : wifiManager.getConfiguredNetworks()) {
            if (conf.SSID.equals(configuredNetwork.SSID)) {
                networkId = configuredNetwork.networkId;
                Log.i(LOG_TAG, "Network already registered : " + networkId);
            }
        }
    }

    if (networkId == -1) {
        networkId = wifiManager.addNetwork(conf);
        Log.i(LOG_TAG, "Network registered : " + networkId);
    } else {
        wifiManager.updateNetwork(conf);
    }

wifiManager.enableNetwork(networkId, true);

【问题讨论】:

  • 拨打addNetwork后你的netId是什么?
  • 嗯我认为有必要用一个int添加网络,然后用这个int启用它。
  • 是的,没错,但是 addNetwork 会返回什么?是-1吗?
  • 那么你的 wifi 配置丢失了一些东西。如果addNetwork 返回-1,则失败。
  • 你能看看我的编辑吗?非常感谢您的帮助:)

标签: java android android-wifi


【解决方案1】:

首先获取开放网络的 ScanResult 对象。

那你就可以用这个方法了。我为你创造的。

public void connect(Context context, ScanResult scanResult){

    WifiManagersingletonWifiManager = (WifiManager)context
                                      .getApplicationContext()
                                      .getSystemService(Context.WIFI_SERVICE);

    configuration = new WifiConfiguration();
    configuration.SSID = scanResult.SSID;
    configuration.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);

    int networkId = singletonWifiManager.addNetwork(configuration);

    if(!singletonWifiManager.isWifiEnabled())
        singletonWifiManager.setWifiEnabled(true);

    singletonWifiManager.disconnect();
    singletonWifiManager.enableNetwork(networkId,true);
    singletonWifiManager.reconnect();
}

别忘了在 Manifest 文件中声明权限。

<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>

有用的资源:

更多相关代码可以查看我的Repository on Github

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    • 2013-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 1970-01-01
    相关资源
    最近更新 更多