package org.ecjtu.channellibrary.wifiutil; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.WifiManager; import android.net.wifi.p2p.WifiP2pDevice; import android.net.wifi.p2p.WifiP2pDeviceList; import android.net.wifi.p2p.WifiP2pManager; import android.util.Log; import java.util.ArrayList; import java.util.List; /** * Created by KerriGan on 2016/8/17. */ public class P2pConnect { private static final String TAG=P2pConnect.class.getSimpleName(); private Context _context; private WifiP2pManager _p2pManager; private WifiP2pManager.Channel _channel; private P2pReceiver _p2pReceiver; private List<WifiP2pDevice> _p2pDeviceList; private IReceive _receiveListener; public P2pConnect(Context context,WifiP2pManager manager,WifiP2pManager.Channel channel,IReceive listener) { _context=context; _p2pManager=manager; _channel=channel; _p2pDeviceList=new ArrayList<>(); _receiveListener=listener; } public void registerReceiver() { IntentFilter filter=P2pManager.getInstance().getP2pManagerIntentFilter(); _context.registerReceiver(_p2pReceiver,filter); } public void unregisterReceiver() { _context.unregisterReceiver(_p2pReceiver); } public P2pReceiver getP2pReceiver() { return _p2pReceiver; } public List<WifiP2pDevice> getP2pDeviceList() { return _p2pDeviceList; } private WifiP2pManager.PeerListListener _peerListener=new WifiP2pManager.PeerListListener() { @Override public void onPeersAvailable(WifiP2pDeviceList peers) { for(WifiP2pDevice device:peers.getDeviceList()) { Log.i(TAG,device.toString()); } _p2pDeviceList.clear(); _p2pDeviceList.addAll(peers.getDeviceList()); } }; private class P2pReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action=intent.getAction(); switch (action) { case WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION: int state=intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE,-1); if(state== WifiManager.WIFI_STATE_ENABLED) { //p2p is enable Log.i(TAG,"WIFI_P2P is enable"); } else { //p2p is not useful Log.i(TAG,"WIFI_P2P is not supported"); } break; case WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION: _p2pManager.requestPeers(_channel,_peerListener); break; case WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION: break; case WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION: break; } if(_receiveListener!=null) _receiveListener.onReceive(context,intent); } } public interface IReceive { void onReceive(Context context, Intent intent); } }