idz*_*ski 3 android wifi-direct
我试图让两个Android设备使用WiFi Direct与对方进行通信.我列出了a中可用的设备,ListView当用户点击设备时,我通过调用WifiP2pManager类的connect方法启动连接.在该方法中,我调用该方法以获取组所有者的IP地址,以便我可以连接到a .onSuccesrequestConnectionInfoServerSocket
问题是我第一次尝试连接WifiP2pInfo 传递给onConnectionInfoAvailablecallback 的对象时有null groupOwnerAddress属性.这对我来说没有意义,因为我在reuestConnectionInfo内部onSuccess调用了connect方法的回调,这意味着连接已经建立.
几秒钟之后,如果我再次尝试通过再次点击设备名称来连接,则该WifiP2pInfo对象现在包含GO的地址,并且我能够启动TCP连接.
我在调用requestConnectionInfo之前尝试让线程休眠几秒钟,但我仍然遇到同样的问题.
@Override
public void onDialogPositiveClick(DialogFragment dialog, final String enteredPin) {
WifiP2pConfig config = new WifiP2pConfig();
config.deviceAddress = mDevice.deviceAddress;
config.groupOwnerIntent = 0;
mManager.connect(mChannel, config, new WifiP2pManager.ActionListener() {
@Override
public void onSuccess() {
mManager.requestConnectionInfo(mChannel, new WifiP2pManager.ConnectionInfoListener() {
@Override
public void onConnectionInfoAvailable(WifiP2pInfo info) {
InetAddress ownerAddress=info.groupOwnerAddress;
if (ownerAddress!=null) {
Log.d("MainActivity ",ownerAddress.toString());
ConnectAsyncTask asyncTask=new ConnectAsyncTask(MainActivity.this,ownerAddress,8888,enteredPin);
asyncTask.execute();
} else {
Toast.makeText(MainActivity.this, "Connection failed! Try again!", Toast.LENGTH_LONG).show();
}
}
});
@Override
public void onFailure(int reason) {
}
});
}
Run Code Online (Sandbox Code Playgroud)
小智 6
当WIFI_P2P_CONNECTION_CHANGED_ACTION广播被捕获时,ConnectionInfo可用.当WifiP2pDevice连接或断开连接时,此广播将触发.这是你的问题.如果设备断开连接,则此广播将触发,但该设备不再在组中.您必须检查更改操作以确定设备已连接或已断开连接.:
public void onConnectionInfoAvailable(WifiP2pInfo info) {
NetworkInfo networkInfo = intent.getParcelableExtra(WifiP2pManager.EXTRA_NETWORK_INFO);
if (networkInfo.isConnected()) {
//connected
} else {
//disconnected
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2086 次 |
| 最近记录: |