package cn.itcast.upload;
import java.io.File;
import java.io.OutputStream;
import java.io.PushbackInputStream;
import java.io.RandomAccessFile;
import java.net.Socket;
import cn.itcast.service.FileService;
import cn.itcast.utils.StreamTool;
import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;
import android.os.Handler;
import android.os.Message;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;
public class UploadActivity extends Activity {
private static final String TAG = "UploadActivity";
private EditText filenameText;
private TextView resultVew;
private ProgressBar progressBar;
private FileService fileService;
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
int size = msg.getData().getInt("size");
progressBar.setProgress(size);
float result = (float)progressBar.getProgress()/ (float)progressBar.getMax();
int p = (int)(result*100);
resultVew.setText(p+"%");
if(progressBar.getProgress()==progressBar.getMax()){
Toast.makeText(UploadActivity.this, R.string.success, 1).show();
}
}
};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
fileService = new FileService(this);
filenameText = (EditText) this.findViewById(R.id.filename);
resultVew = (TextView) this.findViewById(R.id.result);
progressBar = (ProgressBar) this.findViewById(R.id.uploadbar);
Button button = (Button) this.findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String filename = filenameText.getText().toString();
if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
File uploadFile = new File(Environment.getExternalStorageDirectory(), filename);
uploadfile(uploadFile);
}else{
Toast.makeText(UploadActivity.this, R.string.sdcarderror, 1).show();
}
}
});
}
private void uploadfile(final File file){
new Thread(new Runnable() {
@Override
public void run() {
try {
progressBar.setMax((int)file.length());
String sourceid = fileService.find(file);
Socket socket = new Socket("192.168.1.157", 7878);
OutputStream outStream = socket.getOutputStream();
String head = "Content-Length="+ file.length() + ";filename="+ file.getName() + ";sourceid="+
(sourceid==null? "" : sourceid)+"\r\n";
outStream.write(head.getBytes());
PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream());
String response = StreamTool.readLine(inStream);
System.out.println(response);
String[] items = response.split(";");
String id = items[0].substring(items[0].indexOf("=")+1);//服务返回绑定该文件的资源id
String position = items[1].substring(items[1].indexOf("=")+1);
if(sourceid==null) fileService.save(file, id);
RandomAccessFile fileOutStream = new RandomAccessFile(file, "r");
fileOutStream.seek(Integer.valueOf(position));
byte[] buffer = new byte[1024];
int len = -1;
int length = Integer.valueOf(position);
while( (len = fileOutStream.read(buffer)) != -1){
outStream.write(buffer, 0, len);
length += len;
Message msg = new Message();
msg.getData().putInt("size", length);
handler.sendMessage(msg);
}
fileOutStream.close();
outStream.close();
inStream.close();
socket.close();
if(length==file.length()) fileService.delete(file);
} catch (Exception e) {
Log.e(TAG, e.toString());
}
}
}).start();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
Android参考源码-基于socket通讯的文件续传!.zip
共30个文件
class:13个
java:5个
png:3个
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 64 浏览量
2022-03-08
21:26:21
上传
评论
收藏 64KB ZIP 举报
温馨提示
源码参考,欢迎下载
资源推荐
资源详情
资源评论
收起资源包目录
Android参考源码-基于socket通讯的文件续传!.zip (30个子文件)
FileUpload
AndroidManifest.xml 1KB
res
layout
main.xml 1KB
drawable-ldpi
icon.png 2KB
drawable-mdpi
icon.png 3KB
drawable-hdpi
icon.png 4KB
values
strings.xml 401B
src
cn
itcast
utils
StreamTool.java 2KB
service
DBOpenHelper.java 774B
FileService.java 1KB
upload
UploadActivity.java 4KB
bin
FileUpload.apk 18KB
cn
itcast
utils
StreamTool.class 2KB
service
FileService.class 2KB
DBOpenHelper.class 1KB
upload
R.class 517B
R$layout.class 388B
R$attr.class 334B
R$id.class 473B
UploadActivity.class 3KB
R$string.class 549B
UploadActivity$3.class 4KB
UploadActivity$1.class 2KB
UploadActivity$2.class 2KB
R$drawable.class 394B
classes.dex 11KB
resources.ap_ 11KB
.classpath 280B
assets
default.properties 364B
.project 846B
gen
cn
itcast
upload
R.java 1KB
共 30 条
- 1
资源评论
等天晴i
- 粉丝: 3484
- 资源: 10万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功