首页 > 系统 > Android > 正文

Android实现简单的文件下载与上传

2019-10-21 21:32:01
字体:
来源:转载
供稿:网友

文件下载

/** * 下载服务 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    //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)+"/r/n";           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();   } } 

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对VEVB武林网的支持。


注:相关教程知识阅读请移步到Android开发频道。
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表