[英]Transfer a file between Android devices?
I'm making a code and I want to send a mp4 file to another Android device. 我正在编写代码,我想将mp4文件发送到另一个Android设备。 I have reached to connect both Androids via Wifi and write from one a simple for cycle from 1-20 and the other Android device reads and displays the number that is sent. 我已经通过Wifi连接两个Androids并从一个简单的循环中写入1-20,而另一个Android设备读取并显示发送的号码。
Here it is the interesting part of the "sender": 这是“发件人”的有趣部分:
InetAddress serverAddr = InetAddress.getByName(serverIpAddress);
Log.d("ClientActivity", "C: Connecting...");
Socket socket = new Socket(serverAddr, port);
connected = true;
while (connected) {
try {
Log.d("ClientActivity", "C: Sending command.");
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream())), true);
for (int i = 1; i < 20; i++) {
out.println(i);
i=i++;
and the "receiver": 和“接收者”:
serverSocket = new ServerSocket(SERVERPORT);
// listen for incoming clients
Socket client = serverSocket.accept();
BufferedReader in = new BufferedReader(new InputStreamReader(client.getInputStream()),8*1024);
This works great! 这很棒! But I want to send a file from one device to another instead of an int. 但我想将文件从一个设备发送到另一个设备而不是int。 How can I make this????? 我该怎么做这个?????
You need to package the data to the stream through a some kind of data format. 您需要通过某种数据格式将数据打包到流中。 One way to do this is to use the common MIME data format which is commonly used to send attachment in email. 一种方法是使用常用的MIME数据格式,通常用于在电子邮件中发送附件。
I have answered other question related to sending binary via socket using this format in the following SO Question - android add filename to bytestream . 我已经回答了与使用以下SO格式的问题发送二进制通过套接字相关的其他问题 - android将文件名添加到字节流 。 You could check the accepted answer for that question. 您可以检查该问题的已接受答案。
For your reference, I just copied the code for sending and receiving through socket from that question below. 供您参考,我刚刚从下面的问题复制了通过套接字发送和接收的代码。
File f = new File(path);
BufferedOutputStream out = new BufferedOutputStream( socket.getOutputStream() );
String filename=path.substring(path.lastIndexOf("/")+1);
// create a multipart message
MultipartEntity multipartContent = new MultipartEntity();
// send the file inputstream as data
InputStreamBody isb = new InputStreamBody(new FileInputStream(f), "image/jpeg", filename);
// add key value pair. The key "imageFile" is arbitrary
multipartContent.addPart("imageFile", isb);
multipartContent.writeTo(out);
out.flush();
out.close();
And the code to read it back below using MimeBodyPart that is part of JavaMail. 以及使用作为JavaMail一部分的MimeBodyPart读取下面的代码。
MimeMultipart multiPartMessage = new MimeMultipart(new DataSource() {
@Override
public String getContentType() {
// this could be anything need be, this is just my test case and illustration
return "image/jpeg";
}
@Override
public InputStream getInputStream() throws IOException {
// socket is the socket that you get from Socket.accept()
BufferedInputStream inputStream = new BufferedInputStream(socket.getInputStream());
return inputStream;
}
@Override
public String getName() {
return "socketDataSource";
}
@Override
public OutputStream getOutputStream() throws IOException {
return socket.getOutputStream();
}
});
// get the first body of the multipart message
BodyPart bodyPart = multiPartMessage.getBodyPart(0);
// get the filename back from the message
String filename = bodyPart.getFileName();
// get the inputstream back
InputStream bodyInputStream = bodyPart.getInputStream();
// do what you need to do here....
There's an open source project released by Google you can take a look at it and have a general idea about connecting devices and sharing files between them. 有一个由Google发布的开源项目,您可以查看它,并大致了解如何在它们之间连接设备和共享文件。
Here is the link: android-fileshare 这是链接: android-fileshare
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.