如何在Android上通过Wi-Fi热点以编程方式启动本地网络连接?

14

我想要使用Android设备内置的Wi-Fi热点来建立本地网络连接。 有办法实现吗? 如何在两个设备之间进行通信?

编辑: 我希望通过编程实现。这样我就可以在设备之间传输我的自己的数据。


你能澄清一下你的问题吗?你想连接什么,以及如何连接?你是想说你想要自动将设备(比如电脑)连接到你手机的WiFi热点(即数据共享)吗? - brianestey
我想写一个可以在多个安卓设备之间进行通信的应用程序。(我认为最多可以连接6个设备,因为WiFi热点最多只能连接5个客户端。)例如,一个本地子网聊天室。 - shiami
它不需要任何互联网连接。 - shiami
我目前在客户端使用NetworkInterface.getNetworkInterfaces()来查找以192.168开头的地址。然后使用192.168.x.1连接到同一本地网络。使用ServerSocket和Socket启动连接,这样做正确吗? - shiami
1
服务器本身需要使用ServerSocket在特定端口上监听传入的连接,客户端将在该端口上连接到服务器IP地址。请看下面的NanoHttpd,因为它确实做到了这一点,所有代码都在那里。 - brianestey
显示剩余3条评论
5个回答

7

我以前从未做过这个,所以我的答案都是理论上的。

我认为你需要做的是将一个设备声明为服务器,并手动启动其热点并设置已知名称。

从代码中启动/停止内置Wi-Fi / USB共享?(根据此问题,您无法通过编程方式启动热点)。

一旦您设置好了热点,就可以启动服务器应用程序并等待传入连接。 服务器应用程序可以显示IP地址或主机名。

在客户端上,您可以进行简单的检查并查看热点名称是否存在,如果找到它,则自动连接到它。 请参见此链接以连接到网络:

使用WifiManager连接到网络

至于您的第二个问题,如何通信-您需要在设备之间建立连接。 为此,您需要服务器的IP地址。 最简单的方法是在服务器UI上显示IP地址,然后在客户端上手动输入并按连接。 然后它会在已知端口上与服务器建立连接,您可以在客户端和服务器之间发送消息。

供参考,我发现NanoHttpd,这是Android的Web服务器。 它使用ServerSocket来侦听传入连接。


2
有人实际上已经实现了这个吗,特别是与套接字通信的部分。 - hrishikesh
你能在这里发布一些代码吗?如果你已经实现了它的话。 - user6649667

4

可能的答案:

ICS和非Root设备之前

没有办法通过wifi连接到设备。没有相应的API。蓝牙是你最好的选择或者需要用户交互。

ICS和Root设备之前

我不确定是否有人已经破解了代码,但当我尝试自动连接到wifi时,我注意到:

  • API被隐藏在SDK中。
  • 进行连接的方法检查请求它的线程。如果不是操作系统线程,则抛出异常。

使用ICS

使用ICS有一种新的通过wifi连接设备的方式,叫做Wi-Fi Direct。这里有一些演示的链接


1
也许我对您的理解有误,但是 WifiManager 从API v1开始就存在,并且其列出的职责包括配置网络和建立连接。如果您指的是在它们在同一个网络上之后不能相互连接,可以查看使用ServerSocket来监听传入连接的NanoHttpd - brianestey

0
如果您要为每个终端(设备)开发自己的应用程序,那么我认为套接字编程对您来说是一个不错的选择。
是的,Android支持与Java套接字编程相同的套接字编程方式。
首先搜索Google Java套接字编程教程,然后您可以在Android中使用相同的知识。
还要记得在清单中包含使用互联网权限,实际上这是让我头疼了很长时间的事情 :)

0

你是指像点对点(p2p)那样的无需服务器的wifi设备之间的通信吗?如果是,那么它就是wifi direct,在ICS中得到支持,请查看http://developer.android.com/reference/android/net/wifi/p2p/package-summary.html

在ICS之前,没有标准的Android API用于wifi direct,尽管Galaxy S2有wifi direct,但它使用专有的API,第三方开发人员无法使用。


我想使用客户端-服务器结构来完成它。 - shiami

0

我不知道如何以编程方式创建WiFi LAN,但你可以手动创建WiFi LAN,然后按照brianestey所说的进行Java TCP/UDP程序开发。

至于你的第二个问题,如何通信 - 你需要在设备之间建立连接。为此,你需要服务器的IP地址。最简单的方法是在服务器UI上显示IP地址,然后在客户端手动输入它并按连接按钮。然后它将在已知端口上与服务器建立连接,你就可以在客户端和服务器之间发送消息。

对于手动连接,请按以下步骤操作:

  • 从任意一部手机中获取设置/无线和网络/便携式Wi-Fi热点设置

  • 创建新的热点并从那里打开Wi-Fi便携式热点

  • 将所有其他设备连接到该热点,包括你的电脑

  • 你将以编程方式获取每个设备的IP地址(包括PC,但我不确定)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接