WifiP2pManager讲解

1.    这个类的API是为了管理点对点P2PWI-FI热点的。这将会使一个应用发现可以的热点,并且和热点建立连接,还可以查询热点。当一个p2p通过wifi进行连接的时候,你的设备将会继续maintain the uplink connection overmobile或者其他的可以用的网络连接在你的设备上。
2.     这API是同步和响应于来自通过应用监听器回调方法的应用请求,这个应用在对p2p进行操作的之前必须先去初始化通过一个inintialze(Context ,Loop,Wifip2pManager.chanekListener)的方法。
Context:一个源的上下文,Looper:返回一个被调用的回调的Looper。
3.     更多的APP调用需要一个wifip2pManager.changeListener实例去得到两个回调的方法OnSuccess()andOnFailure(int).这两个方法说明了是否成功实例化了这一行为(类)。如果是失败的话,原因可能是一个错误或者不支持或者正忙。
4.     一个应用可以初始化被发现的热点是通过discoverPeers(Wifip2pManager.channel,Wifip2pManager.ActionListener). 一个已经被初始化的Peer来自从设备开始连接热点后应用在活动期间的请求,会组成一个Peer组或者这里有一个明确的stopPeerDiscovery(Wifip2pManager.channel,Wifip2pManager.ActionListen),Apps可以监听wifi_p2p_discovery_changed_Action去知道一个p2p是否在运行或者停止工作,通常地,wifi_p2p_peers_changed_action可以说明peer列表的改变。
5.     当一个应用程序需要去取得当前的peer列表,可以通过调用requestPeers(wifip2pmanager.channnel,wifip2pManager.PeerListListener),当peer列表是可以用的onpeerAvailable(wifip2pDeviceList)被设备列表调用。
6.     一个应用可以初始化一个请求peer的连接通过connect(wifip2pManager.channel,wifip2pConfig,wifip2pManager.ActionListemer).你可以去查看wifip2pConfig 为了详细地去设置配置。为了和附近的不支持p2p的Wifi设备进行通信,一个应用可以产生一个使用createGroup(wifip2pmanger.chanenl,wifip2pmanager.ActionListener)去产生一个可以访问的并可以通过requsetGroupInfo(wifip2pManager.Channel,wifip2pManager.GroupInfiListener)的热点的组。
7.     一个成功通过createGroup(wifip2pmanger.chanenl,wifip2pmanager.ActionListener)或者通过connect(wifip2pmanger.chanenl,wifip2pConfig,wifip2pmanager.ActionListener)形成的组,使用requestConnectionInfo(wifip2pmanger.chanenl,wifip2pmanager.ActionListener)去得到uoge详细的连接信息。这个wifip2pInfo连接信息包含了拥有者组的地址groupOwnerAddress 和一个去说明是非当前设备是这个p2p组的拥有者的标志isGroupOwer,一个p2p的客户端因此可以和p2p组拥有者通过一个socket连接进行通信。
8.     通过peer发现点使用discoverPeer(wifip2pmanger.chanenl,wifip2pmanager.ActionListener),一个应用可以发现附近的应用,但不一个很好的方法去计算那个peer应该去建立一个连接。E.g:如果一个乐于搜索附近的peer是否和自己一样运行同样游戏的游戏应用,它无法找出直到连接被建立之后。
9.     伴随着pre-association服务于discovery,一个应用可以通知一个在两个设备上建立了热点通信的热点应用的服务。目前,基于DNS发现的服务和自动端口映射是更高级OSI的高层协议。获得零配置联网资源在dns-sd.org和自动端口映射资源在的列子:一个视频应用可以发现有能力的自动端口映射热点在去建立wifip2p连接设备。
10.  一个应用可以通知广播一个基于Upnp或Bonjour的通信协议的服务通过调用一个addLocalService(wifip2pManager.Channel,wifip2pManagerInfo,wifip2pManager.ActionListener).的方法。在一个本地的服务增加后,framework会自动响应给一个peer应用发现优先去建立一个p2p连接。调用removeLocalService(wifip2pManager.Channel,wifip2pManagerInfo,wifip2pManager.ActionListener)可以移除一个本地服务或者利用clear(wifip2pManager.Channel,wifip2pManagerInfo,wifip2pManager.ActionListener),清除所有的服务。
11.  一个应用搜索一个支持某种服务的热点设备可以通过调用discoverservices().优先去初始化一个发现,应用可以增加业务请求通过调用addServiceRequest()方法,移除这个业务请求用removeServiceRequest()或者清理所有的请求通过调用clearservicerRequest().当没有业务请求被记录,一个之前正在运行的服务将会被停止,用会得到通知在为业务请求设置了监听器的话。 setDnsSdResponseListeners(WifiP2pManager.Channel,WifiP2pManager.DnsSdServiceResponseListener,WifiP2pManager.DnsSdTxtRecordListener) for Bonjour or setUpnpServiceResponseListener(WifiP2pManager.Channel,WifiP2pManager.UpnpServiceResponseListener) for Upnp.
12.  提醒:注册一个应用处理者利用initialize()的方法是有权限限制的 要在配置的文件中声明权限。permissions ACCESS_WIFI_STATE and CHANGE_WIFI_STATE to perform any further peer-to-peer operations. Get aninstance of this class by calling Context.getSystemService(Context.WIFI_P2P_SERVICE).

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Android Studio中WiFi通信的实现需要使用Android的WiFi管理器和WiFi P2P框架。 1. 在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_NETWORK_STATE"/> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE"/> <uses-permission android:name="android.permission.INTERNET"/> ``` 2. 在代码中获取WiFi管理器和WiFi P2P框架: ``` WifiManager wifiManager = (WifiManager) getApplicationContext().getSystemService(Context.WIFI_SERVICE); WifiP2pManager wifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE); ``` 3. 注册WiFi P2P广播接收器: ``` IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); intentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); intentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); intentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION); WifiP2pManager.Channel channel = wifiP2pManager.initialize(this, getMainLooper(), null); BroadcastReceiver broadcastReceiver = new WiFiDirectBroadcastReceiver(wifiP2pManager, channel, this); registerReceiver(broadcastReceiver, intentFilter); ``` 4. 实现WiFi P2P广播接收器: ``` public class WiFiDirectBroadcastReceiver extends BroadcastReceiver { private WifiP2pManager wifiP2pManager; private WifiP2pManager.Channel channel; private MainActivity activity; private WifiP2pManager.PeerListListener peerListListener; public WiFiDirectBroadcastReceiver(WifiP2pManager wifiP2pManager, WifiP2pManager.Channel channel, MainActivity activity) { this.wifiP2pManager = wifiP2pManager; this.channel = channel; this.activity = activity; this.peerListListener = new WifiP2pManager.PeerListListener() { @Override public void onPeersAvailable(WifiP2pDeviceList wifiP2pDeviceList) { // 处理可用的设备列表 } }; } @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { // 处理WiFi P2P状态变化 } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { // 请求可用的设备列表 wifiP2pManager.requestPeers(channel, peerListListener); } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) { // 处理连接状态变化 } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) { // 处理本设备信息变化 } } } ``` 5. 发现可用的WiFi设备: ``` wifiP2pManager.discoverPeers(channel, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { // 发现可用的设备成功 } @Override public void onFailure(int i) { // 发现可用的设备失败 } }); ``` 6. 建立WiFi P2P连接: ``` WifiP2pDevice device = // 获取要连接的设备 WifiP2pConfig config = new WifiP2pConfig(); config.deviceAddress = device.deviceAddress; wifiP2pManager.connect(channel, config, new WifiP2pManager.ActionListener() { @Override public void onSuccess() { // 连接成功 } @Override public void onFailure(int i) { // 连接失败 } }); ``` 7. 发送和接收WiFi数据包: ``` DatagramSocket socket = new DatagramSocket(); InetAddress address = // 获取目标设备IP地址 int port = // 获取目标设备端口号 String message = // 要发送的消息 byte[] data = message.getBytes(); DatagramPacket packet = new DatagramPacket(data, data.length, address, port); socket.send(packet); ``` ``` DatagramSocket socket = new DatagramSocket(port); byte[] buffer = new byte[1024]; DatagramPacket packet = new DatagramPacket(buffer, buffer.length); socket.receive(packet); String message = new String(packet.getData(), 0, packet.getLength()); ``` 以上是Android Studio中WiFi通信的基本实现方法,具体的实现可能需要根据具体的需求进行调整。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值