package com.example.wifidirectexample; import android.app.Activity; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.net.wifi.p2p.WifiP2pConfig; import android.net.wifi.p2p.WifiP2pDevice; import android.net.wifi.p2p.WifiP2pDeviceList; import android.net.wifi.p2p.WifiP2pManager; import android.net.wifi.p2p.WifiP2pManager.ActionListener; import android.net.wifi.p2p.WifiP2pManager.Channel; import android.net.wifi.p2p.WifiP2pManager.ChannelListener; import android.net.wifi.p2p.WifiP2pManager.PeerListListener; import android.os.Bundle; import android.util.Log; import android.view.Menu; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; import java.util.Iterator; public class WiFiDirectActivity extends Activity implements OnClickListener { private static final String LOG_TAG = WiFiDirectActivity.class.getSimpleName(); private WifiP2pManager mWifiP2pManager; private Channel mChannel; private WiFiDirectBroadcastReceiver mWiFiDirectBroadcastReceiver; private IntentFilter mIntentFilter; private Button mDiscoverPeersBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mWifiP2pManager = (WifiP2pManager)getSystemService(Context.WIFI_P2P_SERVICE); mChannel = mWifiP2pManager.initialize(this, getMainLooper(), new ChannelListener() { @Override public void onChannelDisconnected() { Log.i(LOG_TAG, "Channel disconnected!"); } }); mWiFiDirectBroadcastReceiver = new WiFiDirectBroadcastReceiver(); mIntentFilter = new IntentFilter(); mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION); mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION); mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION); mIntentFilter.addAction(WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION); mDiscoverPeersBtn = (Button)findViewById(R.id.discoverPeers); mDiscoverPeersBtn.setEnabled(false); mDiscoverPeersBtn.setOnClickListener(this); } @Override protected void onResume() { super.onResume(); registerReceiver(mWiFiDirectBroadcastReceiver, mIntentFilter); } @Override protected void onPause() { super.onPause(); unregisterReceiver(mWiFiDirectBroadcastReceiver); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.activity_main, menu); return true; } @Override public void onClick(View v) { switch (v.getId()) { case R.id.discoverPeers: mWifiP2pManager.discoverPeers(mChannel, new ActionListener() { @Override public void onSuccess() { Log.i(LOG_TAG, "DiscoverPeers Success!"); mWifiP2pManager.requestPeers(mChannel, mPeerListListener); } @Override public void onFailure(int reason) { Log.w(LOG_TAG, "DiscoverPeers failure reason: "+reason); } }); break; default: break; } } private PeerListListener mPeerListListener = new PeerListListener() { @Override public void onPeersAvailable(WifiP2pDeviceList peers) { Iterator<WifiP2pDevice> iterator = peers.getDeviceList().iterator(); WifiP2pDevice device; while (iterator.hasNext()) { device = iterator.next(); WifiP2pConfig config = new WifiP2pConfig(); config.deviceAddress = device.deviceAddress; mWifiP2pManager.connect(mChannel, config, new ActionListener() { @Override public void onSuccess() { Log.w(LOG_TAG, "Connect success!"); } @Override public void onFailure(int reason) { Log.w(LOG_TAG, "Connect failure!"); } }); break; } } }; private class WiFiDirectBroadcastReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { String action = intent.getAction(); if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) { int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1); // Check to see if Wi-Fi is enabled and notify appropriate activity if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) { // Wifi Direct is enabled Log.w(LOG_TAG, "Wifi Direct is enabled!"); mDiscoverPeersBtn.setEnabled(true); } else { Log.w(LOG_TAG, " Wi-Fi Direct is not enabled!"); // Wi-Fi Direct is not enabled } } else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) { // Call WifiP2pManager.requestPeers() to get a list of current peers if (mWifiP2pManager != null) { Log.i(LOG_TAG, "WifiP2pManager requestPeers!"); mWifiP2pManager.requestPeers(mChannel, mPeerListListener); } } else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION .equals(action)) { // Respond to new connection or disconnections } else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION .equals(action)) { // Respond to this device's wifi state changing } } } }