在Android中,您可以使用WiFiP2P框架来实现P2P直接连接。以下是一个示例代码,演示了如何同时将设备作为组所有者和客户端。
首先,在AndroidManifest.xml文件中添加以下权限:
接下来,创建一个名为MainActivity的类,并在onCreate方法中添加以下代码:
public class MainActivity extends AppCompatActivity {
private WifiP2pManager mWifiP2pManager;
private WifiP2pManager.Channel mChannel;
private BroadcastReceiver mReceiver;
private IntentFilter mIntentFilter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 初始化WifiP2pManager和Channel
mWifiP2pManager = (WifiP2pManager) getSystemService(Context.WIFI_P2P_SERVICE);
mChannel = mWifiP2pManager.initialize(this, getMainLooper(), null);
// 创建BroadcastReceiver对象
mReceiver = new WifiDirectBroadcastReceiver();
// 创建IntentFilter对象并添加相应的Action
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);
}
@Override
protected void onResume() {
super.onResume();
// 注册BroadcastReceiver
registerReceiver(mReceiver, mIntentFilter);
}
@Override
protected void onPause() {
super.onPause();
// 取消注册BroadcastReceiver
unregisterReceiver(mReceiver);
}
// 创建一个广播接收器用于接收WifiP2P相关的广播
public 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)) {
// Wifi P2P状态改变
// 检查Wifi P2P是否可用
int state = intent.getIntExtra(WifiP2pManager.EXTRA_WIFI_STATE, -1);
if (state == WifiP2pManager.WIFI_P2P_STATE_ENABLED) {
// Wifi P2P可用
// 开始搜索设备
discoverPeers();
} else {
// Wifi P2P不可用
}
} else if (WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION.equals(action)) {
// 可用的对等设备列表发生了变化
// 更新对等设备列表
updatePeers();
} else if (WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION.equals(action)) {
// Wifi P2P连接状态发生了变化
// 检查连接状态
NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
if (networkInfo.isConnected()) {
// 连接成功
// 可以进行数据传输等操作
} else {
// 连接失败
}
} else if (WifiP2pManager.WIFI_P2P_THIS_DEVICE_CHANGED_ACTION.equals(action)) {
// 本设备的信息发生了变化
// 更新本设备的信息
updateDeviceInfo();
}
}
}
// 搜索可用的对等设备
private void discoverPeers() {
mWifiP2pManager.discoverPeers(mChannel, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
// 搜索成功
}
@Override
public void onFailure(int reasonCode) {
// 搜索失败
}
});
}
// 更新对等设备列表
private void updatePeers() {
mWifiP2pManager.requestPeers(mChannel, new WifiP2pManager.P