Android 通过wifidirect发送多个文件
我想通过wifidirect将多个选定文件发送到服务器。 问题是,只发送选定的第一个文件。根据我在网上找到的资源,扩展IntentService的FileTransferService处理异步请求,该服务使用工作线程依次处理每个Intent,并自动停止。有人知道为什么其他文件没有发送到服务器吗?谢谢你的帮助 这是我启动文件传输服务的活动:Android 通过wifidirect发送多个文件,android,intentservice,wifi-direct,Android,Intentservice,Wifi Direct,我想通过wifidirect将多个选定文件发送到服务器。 问题是,只发送选定的第一个文件。根据我在网上找到的资源,扩展IntentService的FileTransferService处理异步请求,该服务使用工作线程依次处理每个Intent,并自动停止。有人知道为什么其他文件没有发送到服务器吗?谢谢你的帮助 这是我启动文件传输服务的活动: ArrayList<String> uris = new ArrayList<String>(); for( int i=
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);
}
这不是为什么上面的代码不起作用的答案,只是一个想法 我有一个类似的要求,即通过WiFi直接发送多个文件。此外,我必须在发送之前加密所有文件 我采用的方法是将要交换的所有文件包含在特定的“目录”中,并在单个文件交换任务的线程中发送该目录中的所有文件
- 从
获取Socket
,并从中进一步获取BufferedOutputStream
DataOutputStream
- 将总体文件计数写入DOS(#目录中的文件)
- [在每次迭代中]将每个文件的名称和长度写入DOS
- 将文件写入BOS
- 在Receiver中执行相反的操作以获取文件
希望这对你有用。干杯。这不是对上述代码为什么不起作用的答案,只是一个想法 我有一个类似的要求,即通过WiFi直接发送多个文件。此外,我必须在发送之前加密所有文件 我采用的方法是将要交换的所有文件包含在特定的“目录”中,并在单个文件交换任务的线程中发送该目录中的所有文件
- 从
获取Socket
,并从中进一步获取BufferedOutputStream
DataOutputStream
- 将总体文件计数写入DOS(#目录中的文件)
- [在每次迭代中]将每个文件的名称和长度写入DOS
- 将文件写入BOS
- 在Receiver中执行相反的操作以获取文件
希望这对你有用。干杯。谢谢你的建议!我可以使用多个Runnable的处理程序延迟发送所有文件。谢谢你的建议!我能够通过使用具有多个Runnable的处理程序延迟来发送所有文件。
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();
}
}
}
}
}