Android实现简单的文件下载与上传
程序员文章站
2022-08-20 16:21:03
文件下载
/**
* 下载服务 intentservice
* 生命周期:
* 1>当第一次启动intentservice时,android容...
文件下载
/** * 下载服务 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)+"\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(); } }
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对的支持。如果你想了解更多相关内容请查看下面相关链接