【问题标题】:I can't connect to the access point made by WI-FI DIRECT via WIFI我无法通过 WIFI 连接到 WI-FI DIRECT 制作的接入点
【发布时间】: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 很容易连接到它。
我尝试了许多库来连接,但结果是一样的。
我想这可能是因为接入点没有互联网连接,我无法连接到它。
请帮助我,我需要为我的应用程序解决这个问题。坦克

【问题讨论】:

    标签: android wifi wifi-direct wifimanager wifip2p


    【解决方案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();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-03-09
      • 2016-11-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-01
      • 1970-01-01
      相关资源
      最近更新 更多