文件下载
- /**
- * 下载服务 IntentService
- * 生命周期:
- * 1>当第一次启动IntentService时,Android容器
- * 将会创建IntentService对象。
- * 2>IntentService将会在工作线程中轮循消息队列,
- * 执行每个消息对象中的业务逻辑。
- * 3>如果消息队列中依然有消息,则继续执行,
- * 如果消息队列中的消息已经执行完毕,
- * IntentService将会自动销毁,执行onDestroy方法。
- */
- public class DownloadService extends IntentService{
- private static final int NOTIFICATION_ID = 100;
- public DownloadService(){
- super("download");
- }
- public DownloadService(String name) {
- super(name);
- }
- /**
- * 该方法中的代码将会在工作线程中执行
- * 每当调用startService启动IntentService后,
- * IntentService将会把OnHandlerIntent中的
- * 业务逻辑放入消息队列等待执行。
- * 当工作线程轮循到该消息对象时,将会
- * 执行该方法。
- */
- protected void onHandleIntent(Intent intent) {
- //发送Http请求 执行下载业务
- //1. 获取音乐的路径
- String url=intent.getStringExtra("url");
- String bit=intent.getStringExtra("bit");
- String title=intent.getStringExtra("title");
- //2. 构建File对象,用于保存音乐文件
- // /mnt/sdcard/Music/_64/歌名.mp3
- File targetFile = new File(Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC),"_"+bit+"/"+title+".mp3" );
- if(targetFile.exists()){
- Log.i("info", "音乐已存在");
- return;
- }
- if(!targetFile.getParentFile().exists()){
- targetFile.getParentFile().mkdirs();
- }
- try {
- sendNotification("音乐开始下载", "音乐开始下载");
- //3. 发送Http请求,获取InputStream
- InputStream is = HttpUtils.getInputStream(url);
- //4. 边读取边保存到File对象中
- FileOutputStream fos = new FileOutputStream(targetFile);
- byte[] buffer = new byte[1024*100];
- int length=0;
- int current = 0;
- int total = Integer.parseInt(intent.getStringExtra("total"));
- while((length=is.read(buffer)) != -1){
- fos.write(buffer, 0, length);
- fos.flush();
- current += length;
- //通知下载的进度
- double progress = Math.floor(1000.0*current/total)/10;
- sendNotification("音乐开始下载", "下载进度:"+progress+"%");
- }
- //5. 文件下载完成
- fos.close();
- cancelNotification(); //重新出现滚动消息
- sendNotification("音乐下载完成", "音乐下载完毕");
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- /**
- * 发通知
- */
- public void sendNotification(String ticker, String text){
- NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- Notification.Builder builder = new Notification.Builder(this);
- builder.setSmallIcon(R.drawable.ic_launcher)
- .setContentTitle("音乐下载")
- .setContentText(text)
- .setTicker(ticker);
- Notification n = builder.build();
- manager.notify(NOTIFICATION_ID, n);
- }
- /**
- * 取消通知
- */
- public void cancelNotification(){
- NotificationManager manager = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
- manager.cancel(NOTIFICATION_ID);
- }
- }
文件上传
- /**
- * 上传文件
- * @param uploadFile
- */
- private void uploadFile(final File uploadFile) {
- new Thread(new Runnable() {
- @Override
- public void run() {
- try {
- uploadbar.setMax((int)uploadFile.length());
- String souceid = logService.getBindId(uploadFile);
- String head = "Content-Length="+ uploadFile.length() + ";filename="+ uploadFile.getName() + ";sourceid="+
- (souceid==null? "" : souceid)+" ";
- Socket socket = new Socket("192.168.1.78",7878);
- OutputStream outStream = socket.getOutputStream();
- outStream.write(head.getBytes());
- PushbackInputStream inStream = new PushbackInputStream(socket.getInputStream());
- String response = StreamTool.readLine(inStream);
- String[] items = response.split(";");
- String responseid = items[0].substring(items[0].indexOf("=")+1);
- String position = items[1].substring(items[1].indexOf("=")+1);
- if(souceid==null){//代表原来没有上传过此文件,往数据库添加一条绑定记录
- logService.save(responseid, uploadFile);
- }
- RandomAccessFile fileOutStream = new RandomAccessFile(uploadFile, "r");
- fileOutStream.seek(Integer.valueOf(position));
- byte[] buffer = new byte[1024];
- int len = -1;
- int length = Integer.valueOf(position);
- while(start&&(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==uploadFile.length()) logService.delete(uploadFile);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }).start();
- }
- }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。如果你想了解更多相关内容请查看下面相关链接
原文链接:https://blog.csdn.net/pigdreams/article/details/52864867