【问题标题】:Wifi-Connecting App Crash (Java, Android)Wifi 连接应用程序崩溃(Java、Android)
【发布时间】:2013-07-05 17:42:35
【问题描述】:

我是 AndroidJava完全菜鸟,我曾使用过 C++ 和小 C#。 我正在尝试创建一个连接到 Wifi 网络的简单 Android 应用。问题是它在 addNetwork() 函数上崩溃。

import android.net.ConnectivityManager;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.view.Menu;
import android.view.View;
import android.widget.Button;

public class MainActivity extends Activity {

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

        final WifiManager wifi = (WifiManager) getSystemService(Context.WIFI_SERVICE);
        final WifiConfiguration wc = new WifiConfiguration();        
        String networkSSID = "********";
        String networkPass = "*******";      
        wc.SSID = "\"" + networkSSID + "\""; 
        wc.preSharedKey = "\""+ networkPass +"\"";
        wc.hiddenSSID = true;
        wc.status = WifiConfiguration.Status.ENABLED;
        wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.TKIP);
        wc.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.CCMP);
        wc.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.WPA_PSK);
        wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.TKIP);
        wc.allowedPairwiseCiphers.set(WifiConfiguration.PairwiseCipher.CCMP);
        wc.allowedProtocols.set(WifiConfiguration.Protocol.RSN);
        int res = wifi.addNetwork(wc);
        wifi.enableNetwork(res, true);
        wifi.setWifiEnabled(true);
        ConnectivityManager connec = (ConnectivityManager)getSystemService(Context.CONNECTIVITY_SERVICE); 

    }
    }

我正在开发 Eclipse,项目的目标是 2.3.3 版本的 Android(我的手机是 2.3.6)。除了在此处(MainActivity.java)中的导入之外,我是否必须包含其他文件?

编辑:在此this 答案中找到此问题的答案。 我的附加问题的答案(我的网络列表附加了相应的 SSID,但是当我 101% 确定它是“不在范围内”时,因为那是我的路由器!你知道可能有什么吗?出错了吗?)和完整的 wifi 连接操作方法here

【问题讨论】:

    标签: java android crash connection wifi


    【解决方案1】:

    你在AndroidMainfest.xml中声明了使用ACCESS_WIFI_STATE的权限吗? 它位于您的 Android 项目的根目录中。

    只需打开它并将其放在应用程序标记的上方或下方

    这样

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

    【讨论】:

    • 我对Manifest一无所知,在项目中也找不到它的代码。
    • 你去吧,我编辑了答案以更详细地解释它。
    • 谢谢!我找到它并将该行放在 标记的正上方,但结果相同,应用程序在打开期间崩溃
    • 你能把你的应用程序日志(Log-cat)粘贴到这里吗,这会有所帮助。在 Eclipse 中打开 log-cat : - Window --> Show View --> Other --> 并输入 Logcat 过滤并选择未弃用的 Logcat
    • 用户 10082 和当前进程都没有 android.permission.CHANGE_WIFI_STATE。我刚刚看到这条线,为其添加了权限并工作了。虽然!我的网络列表附加了相应的 SSID,但是当我 101% 确定它是“不在范围内”时,因为那是我的路由器!你知道哪里出了问题吗?
    【解决方案2】:

    更多信息请参考这个答案,我是从here中提取的

    对于 WEP 网络,您需要这样做:

    ws.wepKeys[0] = "\"" + networkPass + "\""; 
    ws.wepTxKeyIndex = 0;
    ws.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    ws.allowedGroupCiphers.set(WifiConfiguration.GroupCipher.WEP40); 
    

    对于 WPA 网络,您需要像这样添加密码:

    ws.preSharedKey = "\""+ networkPass +"\"";
    

    对于开放网络,您需要这样做:

    ws.allowedKeyManagement.set(WifiConfiguration.KeyMgmt.NONE);
    

    然后,您需要将其添加到 Android wifi 管理器设置中:

    WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
    wifiManager.addNetwork(conf);
    

    如果您需要,您可以添加此项以启用 wifi 本身(如果已启用,则状态不会改变):

    wifiManager.setWifiEnabled(true);
    

    最后,您可能需要启用它,以便 Android 连接到它:

    List<WifiConfiguration> list = wifiManager.getConfiguredNetworks();
    for( WifiConfiguration i : list ) {
        if(i.SSID != null && i.SSID.equals("\"" + networkSSID + "\"")) {
             wifiManager.disconnect();
             wifiManager.enableNetwork(i.networkId, true);
             wifiManager.reconnect();               
    
             break;
        }           
     }
    

    UPD:在 WEP 的情况下,如果您的密码是十六进制的,则不需要用引号括起来。

    【讨论】:

    • 在我运行程序时获得了即时连接。感谢您的时间和帮助。
    • 不客气。请将您的最终评论解释为问题中的第二个问题,并在编辑标志下,以便将来参考人们不会对正确答案有任何问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-28
    相关资源
    最近更新 更多