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

问题描述

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

hibernate.packagesToScan=com.okan.springdemo.entity

,并具有以下权限:

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;
    }           
 }

但它没有连接到该访问点。
但是sumsung wifi Manager可以轻松连接。
我尝试了许多库进行连接,但结果却是相同。
我以为是因为访问点没有互联网连接,所以我无法连接到它。
请帮助我,我需要为我的应用程序解决此问题。 tnks

解决方法

我已解决此问题,我想与您分享解决方案。
我使用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();
}