wifi p2p学习
程序员文章站
2022-07-01 10:50:10
...
wifi p2p学习
- 概述
- 查找设备
- 连接设备
- 发送文件
- 接收文件
概述
wifi p2p是安卓设备之间通过局域网连接的一种方式,可以用来在设备间传输文件和通信。WifiP2pManager提供了安卓客户端之间通过wifi连接的api,它可以让应用连接可以发现到的设备,查询设备列表并连接设备。这个类是异步的,可以通过监听的回调接口对不同状态做出响应。应首先需要进行初始化,然后才能进行p2p逻辑的处理。
本demo中,主要使用到的是WifiP2pManager,通过getSystemService(Context.WIFI_P2P_SERVICE)获取到WifiP2pManager对象mWifiP2pManager,然后使用mWifiP2pManager.initialize(Context srcContext, Looper srcLooper, ChannelListener listener)创建mWifiP2pManager.Channel对象mChannel。
1. 初始化
WifiP2pManager mWifiP2pManager = (WifiP2pManager) getApplicationContext().getSystemService(Context.WIFI_P2P_SERVICE);
WifiP2pManager.Channel mChannel = mWifiP2pManager.initialize(this, getMainLooper(), null);
2.创建广播接收器
在广播接收中对意图进行判断,主要有以下几种状态: WIFI_P2P_STATE_CHANGED_ACTION
:
wifi-p2p是否开启 WIFI_P2P_CONNECTION_CHANGED_ACTION
:
对等节点连接状态发生变化 WIFI_P2P_DISCOVERY_CHANGED_ACTION
:
发现对等节点发生变化 WIFI_P2P_PEERS_CHANGED_ACTION
:
对等节点列表发生变化 WIFI_P2P_THIS_DEVICE_CHANGED_ACTION
:
设备信息发生变化
@Override
public void onReceive(Context context, Intent intent) {
Log.d(TAG, "onReceive: " + intent.toString());
String action = intent.getAction();
if (action == null || action.isEmpty()) return;
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
Log.d(TAG, "WIFI_P2P_STATE_CHANGED_ACTION");
int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
} else {
}
} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
Log.d(TAG, "WIFI_P2P_CONNECTION_CHANGED_ACTION");
NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
if (networkInfo != null && networkInfo.isConnected()) {
activity.handleNetworkInfo(networkInfo);
}
} else if (WifiP2pManager.WIFI_P2P_DISCOVERY_CHANGED_ACTION.equals(action)) {
Log.d(TAG, "WIFI_P2P_DISCOVERY_CHANGED_ACTION");
} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
activity.requestPeer();Log.d(TAG, "WIFI_P2P_PEERS_CHANGED_ACTION");
} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
Log.d(TAG, "WIFI_P2P_THIS_DEVICE_CHANGED_ACTION");
}
}
查找设备
private void searchPeer() {
mWifiP2pManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
Log.d(TAG, "searchPeer onSuccess");
}
@Override
public void onFailure(int reason) {
Log.e(TAG, "searchPeer onFailure: " + reason);
}
});
mPeerListListener = new WifiP2pManager.PeerListListener() {
@Override
public void onPeersAvailable(WifiP2pDeviceList peers) {
mPeerList.clear();
mPeerList.addAll(peers.getDeviceList());
mPeerAdapter.notifyDataSetChanged();
}
};
}
连接设备
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = device.deviceAddress;
config.wps.setup = WpsInfo.PBC;
mWifiP2pManager.connect(mChannel, config, actionListener);
发送文件
指定主机和端口号,在socket层建立连接后使用输出流发送文件。
接收文件
ServerSocket serverSocket = new ServerSocket(port);
Socket socket = serverSocket.accept();
InputStream inputStream = socket.getInputStream();
推荐阅读
-
Applewatch怎么连接WiFi?Applewatch连接WiFi图文教程
-
iOS学习笔记-139.RunLoop07——Runloop处理流程
-
Python学习笔记之os模块使用总结
-
IOS UI学习教程之使用代码创建button
-
IOS UI学习教程之区分NSBundle和NSURL(读取文件、写入文件)
-
7.1(java学习笔记)InetAddress&InetScoketAddress
-
java学习实验随笔-------如何从键盘输入数据并保存到数组中
-
IOS UI学习教程之设置UITextField各种属性
-
IOS UI学习教程之使用UIImageView控件制作动画
-
Python学习笔记(一)(基础入门之环境搭建)