Android之断点续传下载
来源:程序员人生 发布时间:2014-11-13 08:25:06 阅读次数:1889次
今天学习了Android开发中比较难的1个环节,就是断点续传下载,很多人看到这个标题就感觉头大,的确,如果没有良好的逻辑思惟,这块的确很难弄明白。下面我就将自己学到的知识和1些见解写下供那些在这个环节还烦恼的人参考。这里我以下载mp3文件为例。
断点续传下载,顾名思义,那就是我们在1次下载未结束时,退出下载,第2次下载时会接着第1次下载的进度继续下载。那末怎样记录第1次下载的数据呢,这里肯定就要用到http://www.wfuyu.com/db/了。下面就是我创建http://www.wfuyu.com/db/的1个SQLiteOpenHelper类。用来首次运行时创建http://www.wfuyu.com/db/。
DBHelper类:
1 package cn.yj3g.DBHelper;
2
3 import android.content.Context;
4 import android.database.sqlite.SQLiteDatabase;
5 import android.database.sqlite.SQLiteOpenHelper;
6
7 /**
8 * 建立1个http://www.wfuyu.com/db/帮助类
9 */
10 public class DBHelper extends SQLiteOpenHelper {
11 //download.db-->http://www.wfuyu.com/db/名
12 public DBHelper(Context context) {
13 super(context, "download.db", null, 1);
14 }
15
16 /**
17 * 在download.dbhttp://www.wfuyu.com/db/下创建1个download_info表存储下载信息
18 */
19 @Override
20 public void onCreate(SQLiteDatabase db) {
21 db.execSQL("create table download_info(_id integer PRIMARY KEY AUTOINCREMENT, thread_id integer, "
22 + "start_pos integer, end_pos integer, compelete_size integer,url char)");
23 }
24 @Override
25 public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
26
27 }
28
29 }
下面来看主界面的布局,在这里,我只设计了1个ListView来显示下载的音乐的名称,和1个开始下载按钮和1个暂停按钮。
布局文件以下:
main.xml:
1 <?xml version="1.0" encoding="utf⑻"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="fill_parent"
6 android:id="@+id/llRoot">
7 <ListView android:id="@android:id/list"
8 android:layout_width="fill_parent"
9 android:layout_height="fill_parent">
10 </ListView>
11 </LinearLayout>
list_item.xml:
1 <?xml version="1.0" encoding="utf⑻"?>
2 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
3 android:orientation="vertical"
4 android:layout_width="fill_parent"
5 android:layout_height="wrap_content">
6 <LinearLayout
7 android:orientation="horizontal"
8 android:layout_width="fill_parent"
9 android:layout_height="wrap_content"
10 android:layout_marginBottom="5dip">
11 <TextView
12 android:layout_width="fill_parent"
13 android:layout_height="wrap_content"
14 android:layout_weight="1"
15 android:id="@+id/tv_resouce_name"/>
16 <Button
17 android:layout_width="fill_parent"
18 android:layout_height="wrap_content"
19 android:layout_weight="1"
20 android:text="下载"
21 android:id="@+id/btn_start"
22 android:onClick="startDownload"/>
23 <Button
24 android:layout_width="fill_parent"
25 android:layout_height="wrap_content"
26 android:layout_weight="1"
27 android:text="暂停"
28 android:id="@+id/btn_pause"
29 android:onClick="pauseDownload"/>
30 </LinearLayout>
31 </LinearLayout>
主界面运行效果以下:
下面我们来看具体实现下载的方法。首先,我们要定义1个记录在下载时各个时期的数据的类,这里我创建了1个DownloadInfo类来记录。代码以下:
DownloadInfo:
1 package cn.yj3g.entity;
2 /**
3 *创建1个下载信息的实体类
4 */
5 public class DownloadInfo {
6 private int threadId;//下载器id
7 private int startPos;//开始点
8 private int endPos;//结束点
9 private int compeleteSize;//完成度
10 private String url;//下载器网络标识
11 public DownloadInfo(int threadId, int startPos, int endPos,
12 int compeleteSize,String url) {
13 this.threadId = threadId;
14 this.startPos = startPos;
15 this.endPos = endPos;
16 this.compeleteSize = compeleteSize;
17 this.url=url;
18 }
19 public DownloadInfo() {
20 }
21 public String getUrl() {
22 return url;
23 }
24 public void setUrl(String url) {
25 this.url = url;
26 }
27 public int getThreadId() {
28 return threadId;
29 }
30 public void setThreadId(int threadId) {
31 this.threadId = threadId;
32 }
33 public int getStartPos() {
34 return startPos;
35 }
36 public void setStartPos(int startPos) {
37 this.startPos = startPos;
38 }
39 public int getEndPos() {
40 return endPos;
41 }
42 public void setEndPos(int endPos) {
43 this.endPos = endPos;
44 }
45 public int getCompeleteSize() {
46 return compeleteSize;
47 }
48 public void setCompeleteSize(int compeleteSize) {
49 this.compeleteSize = compeleteSize;
50 }
51
52 @Override
53 public String toString() {
54 return "DownloadInfo [threadId=" + threadId
55 + ", startPos=" + startPos + ", endPos=" + endPos
56 + ", compeleteSize=" + compeleteSize +"]";
57 }
58 }
在下载时,我们有进度条来显示进度,怎样肯定进度条的进度,大小和起始位置呢?这里我定义了1个LoadInfo类来记录下载器详细信息。代码以下:
LoadInfo:
1 package cn.yj3g.entity;
2 /**
3 *自定义的1个记载下载器详细信息的类
4 */
5 public class LoadInfo {
6 public int fileSize;
//文件大小
7 private int complete;
//完成度
8 private String urlstring;
//下载器标识
9 public LoadInfo(
int fileSize,
int complete, String urlstring) {
10 this.fileSize = fileSize;
11 this.complete = complete;
12 this.urlstring = urlstring;
13 }
14 public LoadInfo() {
15 }
16 public int getFileSize() {
17 return fileSize;
18 }
19 public void setFileSize(
int fileSize) {
20 this.fileSize = fileSize;
21 }
22 public int getComplete() {
23 return complete;
24 }
<
生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
------分隔线----------------------------
------分隔线----------------------------