我想通过 Wi-Fi Direct 在 2 台设备之间传输文件。
我想做和WifiDirectDemo中一样的事情,但是我无法将数据从组所有者传输到另一台设备,所以我尝试了这个:每次当其中一个设备点击连接时,另一台设备被设置为组所有者,因此在每个连接上,请求连接的设备始终是客户端并且可以发送数据。
这样做的问题是,Android 总是记住创建的第一个组,因此记住它的组所有者。换句话说,除非我进入设置并忘记第一次连接创建的组,否则我所做的只是第一次工作。
我知道通过使用断开按钮,Wi-Fi 组被删除,但 Android 系统将其放入记住的组中,并在建立新连接时使用其设置(组所有者协商)。
我尝试的第二件事是ServerSocket
在每个设备上(在另一个端口上)创建一个,这样组所有者和另一个设备将同时是客户端和服务器。我不知道是否可以将组所有者设置为客户端,但我无法ServerSocket
在两个设备上创建。这是我的代码:
<pre>
@Override
public void onConnectionInfoAvailable(final WifiP2pInfo info) {
if (progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
}
this.info = info;
this.getView().setVisibility(View.VISIBLE);
// The owner IP is now known.
TextView view = (TextView) mContentView.findViewById(R.id.group_owner);
view.setText( getResources().getString(R.string.group_owner_text)
+ ((info.isGroupOwner == true) ? getResources().getString(R.string.yes)
: getResources().getString(R.string.no)));
// InetAddress from WifiP2pInfo struct.
view = (TextView) mContentView.findViewById(R.id.device_info);
view.setText("Group Owner IP - " + info.groupOwnerAddress.getHostAddress());
// After the group negotiation, we assign the group owner as the file
// server. The file server is single threaded, single connection server
// socket.
if (info.groupFormed && info.isGroupOwner) {
new FileServerAsyncTask(getActivity(), mContentView.findViewById(R.id.status_text),8988)
.execute();
mContentView.findViewById(R.id.btn_start_client).setVisibility(View.VISIBLE);
Log.d(WiFiDirectActivity.TAG, "serveur8988cree");
} else if (info.groupFormed) {
// The other device acts as the client. In this case, we enable the
// Get file button.
// In this case we create a server socket on another port
new FileServerAsyncTask(getActivity(), mContentView.findViewById(R.id.status_text),8987)
.execute();
mContentView.findViewById(R.id.btn_start_client).setVisibility(View.VISIBLE);
Log.d(WiFiDirectActivity.TAG, "serveur8987cree");
((TextView) mContentView.findViewById(R.id.status_text)).setText(getResources()
.getString(R.string.client_text));
}
</pre>
感谢帮助。