我无法通过 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 请求