wifi p2p学习

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();

demo地址:
https://github.com/qiiyue/AndroidDemo.git

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值