WiFi-Direct Windows开发——用平板直连控制电脑

1. 背景介绍

最近做一个项目,因为空间限制,拆掉了工控机的触摸屏,要求用平板显示工控机的画面并做控制,工控机使用的windows10系统,自带无线网卡
同事之前已经实现了用平板控制工控机,方法是工控机和平板连接同一个WiFi,用微软的远程控制软件实现远程控制。但是这个方法有个缺点,就是工控机要提前配置好WiFi连接,一旦换了工作地点,工控机又没有显示器,完全没法操作来连接网络了呀!

2. win10开热点

查阅了大量资料后,终于找到了办法,就是工控机开热点,平板连接热点后,双方就是直连,开机就能自动连接啦!然而win10系统开热点之前必须连接网络…我要是能连接网络,我还有必要开热点嘛!
事情似乎无解了,但是思考后发现,如果我能避开win10系统开热点之前必须联网的设定不就行了。又是一顿查阅资料,有人说可以开启承载网络,我试了一下,然而工控机自带网卡并不支持承载网络,笔记本电脑自带网卡也不支持承载网络,倒是外接的USB无线网卡可以开启承载网络,我想给工控机配个USB无线网卡,问题就算解决了。

3. WiFi-Direct底层实现

然而我这个人就是犟驴,我凭什么要多花40多块钱来实现win10系统本来就有的功能?我非要看看win10底层是怎样开热点的。win10开热点之后,我发现网络适配器里面多出来一个WiFi Direct虚拟网卡,好,找到突破点了!又查了一天资料,在网上找到一个论坛,博主给的是C#源码,然而我复制下来是各种报错,好在评论里给了一个c++源码链接,代码跑起来了!略做修改后运行,发现笔记本电脑确实开启了热点,关键是不需要联网!大功告成,把代码甩给同事继续完善吧,哈哈哈😁!
论坛链接:WiFi-Direct底层代码

很抱歉,作为AI语言模型,我无法编写实际的安卓应用程序。但我可以给您一些基本的指导和思路,帮助您了解如何连接WIFI-Direct。 首先,您需要在Android应用程序中实现WIFI-Direct连接的基本功能。这包括以下步骤: 1. 检查设备是否支持WIFI-Direct。您可以使用WifiP2pManager类来检查设备是否支持WIFI-Direct,如下所示: ``` WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); if (manager != null && manager.isWifiP2pSupported()) { // WIFI-Direct is supported } else { // WIFI-Direct is not supported } ``` 2. 初始化WIFI-Direct。您需要创建一个WifiP2pManager对象和一个WifiP2pManager.Channel对象,用于与WIFI-Direct框架进行通信。您可以在Activity的onCreate()方法中执行此操作,如下所示: ``` WifiP2pManager manager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); WifiP2pManager.Channel channel = manager.initialize(this, getMainLooper(), null); ``` 3. 执行WIFI-Direct扫描。您可以使用WifiP2pManager.discoverPeers()方法执行WIFI-Direct扫描,以查找其他设备。您可以在Activity中创建一个BroadcastReceiver对象,以侦听WIFI-Direct扫描结果。您需要在AndroidManifest.xml文件中添加以下权限: ``` <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"/> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/> ``` 以下是执行WIFI-Direct扫描的示例代码: ``` manager.discoverPeers(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { // WIFI-Direct discovery started successfully } @Override public void onFailure(int reason) { // WIFI-Direct discovery failed } }); // Create a BroadcastReceiver for WIFI-Direct scan results private BroadcastReceiver wifiDirectReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { // WIFI-Direct peers changed WifiP2pDeviceList devices = intent.getParcelableExtra(WifiP2pManager.EXTRA_P2P_DEVICE_LIST); // Get a list of available devices and update the UI accordingly } } }; // Register the BroadcastReceiver to receive WIFI-Direct scan results IntentFilter filter = new IntentFilter(); filter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); registerReceiver(wifiDirectReceiver, filter); ``` 4. 连接到其他设备。一旦您发现了其他WIFI-Direct设备,您可以使用WifiP2pManager.connect()方法连接到它们。您需要在Activity中创建一个BroadcastReceiver对象,以侦听连接状态更改。以下是连接到其他设备的示例代码: ``` WifiP2pConfig config = new WifiP2pConfig(); config.deviceAddress = device.deviceAddress; manager.connect(channel, config, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { // WIFI-Direct connection started successfully } @Override public void onFailure(int reason) { // WIFI-Direct connection failed } }); // Create a BroadcastReceiver for WIFI-Direct connection status changes private BroadcastReceiver connectionReceiver = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { // WIFI-Direct connection status changed NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO); if (networkInfo.isConnected()) { // Connected to a WIFI-Direct device } else { // Disconnected from a WIFI-Direct device } } } }; // Register the BroadcastReceiver to receive WIFI-Direct connection status changes IntentFilter filter = new IntentFilter(); filter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); registerReceiver(connectionReceiver, filter); ``` 以上是连接WIFI-Direct的基本步骤。当然,实际的应用程序可能需要更多的功能和用户界面元素,但这些步骤可以帮助您了解如何使用WIFI-Direct连接设备。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值