зарегистрировать Инстр astReceiver в onResume() и переопределить его. не забудьте отменить его в OnPause()
private class WiFiDirectBroadcastReceiver extends android.content.BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
//TODO
} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
//TODO
} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
//TODO
} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
//TODO
}
}
}
затем попытаться вызвать discoverPeers() первым
mWifiP2pManager.discoverPeers(Channel mChannel, ActionListener mActionListener);
если discoverPeers() не найти коллег, действие WIFI_P2P_PEERS_CHANGED_ACTION будет срабатывать.
мы можем назвать requestPeers() в WIFI_P2P_PEERS_CHANGED_ACTION в BroadcastReceiver
mWifiP2pManager.requestPeers(Channel mChannel, WifiP2pManager.PeerListListener);
поэтому наша BroadcastReceiver теперь выглядит как этот
private class WiFiDirectBroadcastReceiver extends android.content.BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
//TODO
} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
mWifiP2pManager.requestPeers(mChannel , pl);
} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
//TODO
} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
//TODO
}
}
}
реализовать WifiP2pManager.PeerListListener, вам необходимо переопределить onPeersAvailable (WifiP2pDeviceList пэров)
in onPeersAvailable(), параметр wifiP2pDeviceList означает сверстников, которых вы обнаружили
Нам нужен объект пользовательского интерфейса, чтобы мы могли выбрать, какое устройство подключиться, поэтому я использую spinner здесь.
также вы можете использовать listView или что-то еще.
private List<WifiP2pDevice> mPeers = new ArrayList<WifiP2pDevice>();
spinnerAdapter = new WiFiPeerListAdapter(this, R.layout.row_devices, mPeers);
...
@Override
public void onPeersAvailable(WifiP2pDeviceList wifiP2pDeviceList) {
mPeers.clear();
mPeers.addAll(wifiP2pDeviceList.getDeviceList());
spinnerAdapter.notifyDataSetChanged();
}
наконец, мы можем подключить к устройству
WifiP2pDevice device = spinnerAdapter.getItem((int) mSpinner.getSelectedItemId());
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = device.deviceAddress;
config.wps.setup = WpsInfo.PBC;
mWifiP2pManager.connect(mChannel, config, mActionListener);
после двух подключенного устройства BroadcastReceiver действие WIFI_P2P_CONNECTION_CHANGED_ACTION будет срабатывать. поэтому мы можем что-то сделать здесь.
наш BroadcastReceiver теперь выглядит
private class WiFiDirectBroadcastReceiver extends android.content.BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
String action = intent.getAction();
if (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION.equals(action)) {
//TODO
} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
mWifiP2pManager.requestPeers(mChannel , pl);
} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
if (networkInfo != null) {
Log.d(TAG,networkInfo.toString());
if (networkInfo.isConnected()) {
mWifiP2pManager.requestConnectionInfo(mChannel, WifiP2pManager.ConnectionInfoListener);
}
}
} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
//TODO
}
}
}
Кстати, журнал в действии WIFI_P2P_CONNECTION_CHANGED_ACTION получите что-то вроде этого
NetworkInfo: type: WIFI_P2P[], state: UNKNOWN/IDLE, reason: (unspecified), extra: (none), roaming: false, failover: false, isAvailable: true, simId: 0
теперь мы должны реализовать WifiP2pManager.ConnectionInfoListener и переопределить его абстрактный метод onConnectionInfoAvailable (данные WifiP2pInfo) для запросаConnectionInfo()
private WifiP2pInfo p2pInfo;
@Override
public void onConnectionInfoAvailable(final WifiP2pInfo info) {
p2pInfo = info;
mWifiP2pManager.requestGroupInfo(mChannel, WifiP2pManager.GroupInfoListener);
}
снова мы должны реализовать WifiP2pManager.GroupInfoListener и переопределить onGroupInfoAvailable (WifiP2pGroup группы)
@Override
public void onGroupInfoAvailable(WifiP2pGroup wifiP2pGroup) {
String log;
if(wifiP2pGroup.isGroupOwner()) {
log = "I am GO";
}else{
log = "I am not GO";
}
Log.d(TAG, log);
}
теперь мы почти получили все данные об этих двух устройствах
наслаждаться этим
Пожалуйста, поделитесь своим LogCat сообщением, так мы можем иметь некоторое представление о том, что происходит. – Chucky