gpt4 book ai didi

android - 通过 wifi direct 发送多个文件

转载 作者:行者123 更新时间:2023-12-02 04:22:58 25 4
gpt4 key购买 nike

我想通过 wifidirect 将多个选定的文件发送到服务器。问题是,仅发送所选的第一个文件。根据我在网上找到的资源,扩展IntentService的FileTransferService处理异步请求,该服务使用工作线程依次处理每个Intent,并自动停止。有人知道为什么其他文件没有发送到服务器吗?任何帮助表示赞赏。

这是我启动文件传输服务的 Activity :

 ArrayList<String> uris = new ArrayList<String>();
for( int i=0 ; i<f22.size(); i++ )
{

Uri uri = Uri.fromFile(f22.get(i));

uris.add(uri.toString());

}

serviceIntent.setAction(FileTransferService.ACTION_SEND_FILE);
for(int i=0; i<uris.size();i++)
{
serviceIntent.putExtra(FileTransferService.EXTRAS_GROUP_OWNER_ADDRESS,
DeviceDetailFragment.info.groupOwnerAddress.getHostAddress());

serviceIntent.putExtra(FileTransferService.EXTRAS_GROUP_OWNER_PORT, 8988);


serviceIntent.putExtra(FileTransferService.EXTRAS_FILE_PATH, uris.get(i).toString());

startService(serviceIntent);


}

这是FileTransferService中的onHnadleintent函数

protected void onHandleIntent(Intent intent) {

Context context = getApplicationContext();
if (intent.getAction().equals(ACTION_SEND_FILE)) {

String fileUri = intent.getExtras().getString(EXTRAS_FILE_PATH);
String host = intent.getExtras().getString(EXTRAS_GROUP_OWNER_ADDRESS);
Socket socket = new Socket();
int port = intent.getExtras().getInt(EXTRAS_GROUP_OWNER_PORT);

try {
Log.d(WiFiDirectActivity.TAG, "Opening client socket - ");
socket.bind(null);
socket.connect((new InetSocketAddress(host, port)), SOCKET_TIMEOUT);

Log.d(WiFiDirectActivity.TAG, "Client socket - " + socket.isConnected());
OutputStream stream = socket.getOutputStream();
ContentResolver cr = context.getContentResolver();
InputStream is = null;


try {
is = cr.openInputStream(Uri.parse(fileUri));

} catch (FileNotFoundException e) {
Log.d(WiFiDirectActivity.TAG, e.toString());
}
DeviceDetailFragment.copyFile(is, stream);
Log.d(WiFiDirectActivity.TAG, "Client: Data written");

}
catch (IOException e) {
Log.e(WiFiDirectActivity.TAG, e.getMessage());
} finally {
if (socket != null) {
if (socket.isConnected()) {
try {
socket.close();

} catch (IOException e) {
// Give up
e.printStackTrace();
}
}
}
}

}

最佳答案

这并不是上述代码不起作用的原因的答案,而只是一个想法。

我有类似的要求,通过 WiFi Direct 发送多个文件。另外,我必须在发送之前加密所有文件。

我遵循的方法是将要交换的所有文件包含在特定“目录”中,并在单个文件交换任务的线程中发送该目录中的所有文件

  • Socket 获取 BufferedOutputStream,并进一步从中获取 DataOutputStream
  • 将总体文件计数写入 DOS(目录中的文件数量)
  • [在每次迭代中]将每个文件的名称和长度写入DOS
  • 文件写入BOS
  • 在 Receiver 中执行相反的操作以获取文件

您可以从下面讨论链接中找到一些帮助来实现此目的:

How to send a list of files over a socket

Note: The limitation is that all the files you intend to send, has to be in this particular Directory/Sub-Directory

希望这对你有用。干杯。

关于android - 通过 wifi direct 发送多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28994472/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com