我无法通过 WIFI 连接到 WI-FI DIRECT 制作的接入点

Posted

技术标签:

【中文标题】我无法通过 WIFI 连接到 WI-FI DIRECT 制作的接入点【英文标题】:I can't connect to the access point made by WI-FI DIRECT via WIFI 【发布时间】:2020-10-05 09:28:17 【问题描述】:

我使用 android WI-FI P2P API 创建了一个接入点,我想使用 WIFI(不是 wifi 直连)和以下代码与另一部手机连接:

WifiConfiguration conf = new WifiConfiguration();
conf.SSID = "\"" + networkSSID + "\""; 
conf.preSharedKey = "\""+ networkPass +"\"";
WifiManager wifiManager = (WifiManager)context.getSystemService(Context.WIFI_SERVICE); 
wifiManager.addNetwork(conf);
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;
               
 

并具有以下权限:

    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <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" />
    <uses-permission android:name="android.permission.INTERNET" />

但它没有连接到那个接入点。 但是 sumsung wifi manager 很容易连接到它。 我尝试了许多库来连接,但结果是一样的。 我想这可能是因为接入点没有互联网连接,我无法连接到它。 请帮助我,我需要为我的应用程序解决这个问题。坦克

【问题讨论】:

【参考方案1】:

我解决了这个问题,我想与你分享解决方案。 我使用 WIFI DIRECT API 来发现接入点并检索它的信息(如密码)来连接它,但我意识到当您使用 WIFI DIRECT API 来发现服务时,您无法同时使用 WIFI 连接到接入点(我认为这是错误)。所以你应该先停止服务发现,然后连接到接入点。 我使用了以下代码:

public void connectToAccessPoint(GroupAccessPoint groupAccessPoint) 
    stopServiceDiscovery(new WifiP2pManager.ActionListener() 
        @Override
        public void onSuccess() 
            connect(groupAccessPoint);
        

        @Override
        public void onFailure(int reason) 
            connect(groupAccessPoint);
        
    );


public void stopServiceDiscovery(@Nullable WifiP2pManager.ActionListener stopDiscoveryListener) 
    if (wifiP2pManager == null) return;
    wifiP2pManager.clearServiceRequests(channel, new DefaultActionListener(actionListener, Action.CANCEL_DISCOVERING));
    wifiP2pManager.setDnsSdResponseListeners(channel, null, null);
    wifiP2pManager.stopPeerDiscovery(channel, stopDiscoveryListener);


private void connect(GroupAccessPoint groupAccessPoint) 
    WifiUtils.withContext(activity.getApplicationContext())
            .connectWith(groupAccessPoint.ssid, groupAccessPoint.password)
            .setTimeout(12000)
            .onConnectionResult(new ConnectionSuccessListener() 
                @Override
                public void success() 
                    actionListener.onSuccess(Action.JOIN_GROUP);
                

                @Override
                public void failed(@NonNull ConnectionErrorCode errorCode) 
                    actionListener.onFailure(Action.JOIN_GROUP);
                
            ).start();

【讨论】:

以上是关于我无法通过 WIFI 连接到 WI-FI DIRECT 制作的接入点的主要内容,如果未能解决你的问题,请参考以下文章

在 android 上使用 pyjnius 连接到 wifi 网络

如果通过应用程序连接到 WIFI,则无法在 Android 上发送 http 请求

Wi-fi无法连接到Android Studio模拟器

android 2.2 模拟器 -- 无法加载 Wi-Fi 驱动程序

iPhone无法通过WiFi连接到本地HTTP服务器

kali物理机笔记本怎么连接到自己的wifi