免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1167 | 回复: 0
打印 上一主题 下一主题

[转]为程序增加Download activity模块 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-12-01 00:31 |只看该作者 |倒序浏览

仅从标题还不足以概括本教程的核心内容,因为创建一个新的
Activity
,并整合到现有package中再简单不过了。说正题,
Download
Activity究竟是发挥什么作用?带着这个疑问先让我们来对比类似的应用,例如:某些桌面软件在运行初期需要配置程序的初始化配置,这包括从本地读取一些*.config的文件或者从网络服务器读取最新的数据。当我们运行一款游戏的时候,需要核实游戏用户身份,并通过存储在网络服务器中的数据对当前登录的用户完成必要的属性配置,同时游戏客户端也需要下载一些必要的文件来更新当前运行版本等等。返回到今天我们要介绍的主题,为软件增加一个Download Activity来使程序根据需要获取外部的必要资源。

制作一个实现标准Downloader功能的程序非常容易,仅需要修改当前例子中的URL和一个用于存储下载列表的XML文件。以下是Package完整源代码:
downloaderExample.rar
Password:androidres
例子中包含的几个主要功能:

  • 通过给定的文件列表,从网络获取这些数据,并保存在本地的SD Card中。确保其它Activity在运行时可以得到所需资源。
  • 提供一个Download Activity,用于显示当前下载状态,包括:文件名和整体进度等。
  • 当文件在传输过程中出现的任何问题,例如:网络连接突然中断或者其它任何异常所导致的错误。系统需要提供对错误的分析数据,并发出异常报告。

两个现实存在的问题(并不影响功能的使用):

  • 当前java.security.MessageDigest效率相对较低。
  • USER_AGENT没有包含在实际发送给HTTP服务器的请求内容中。

通过几个简单的步骤将例子中的Download Activity整合到现存的Package中:
第一步,
将两个.java文件拷贝到当前Package工程src目录中。

  • PreconditionActivityHelper.java
  • DownloaderActivity.java

将res/values/string.xml中所定义的数据与现有string.xml的数据合并。
第二步,
将下边的代码加入到主Activity的onCreate()方法中。
1.if (! DownloaderActivity.ensureDownloaded(this,
2.         getString(R.string.app_name), FILE_CONFIG_URL,
3.         CONFIG_VERSION, DATA_PATH, USER_AGENT)) {
4.     return;
5. }
然后再将这些Final Static变量添加到主Activity类中。这些变量定义了config文件的URL,以及在SD Card中存放文件的地址等。
1./**
2. * Fill this in with your own web server.
3. */
4.private final static String FILE_CONFIG_URL =
5.    "
http://example.com/download.config
";
6.private final static String CONFIG_VERSION = "1.0";
7.private final static String DATA_PATH = "/sdcard/data/downloadTest";
8.private final static String USER_AGENT = "MyApp Downloader";
第三步,
通常在创建一个新的Package时,都需要考虑Package所需要的Permission,因为这个涉及到之后我们所调用的某些功能是否被允许在用户终端调用。
添加两个标签:
增加所需要的Permission
?
[Copy to clipboard]
View Code
XML
android:name="android.permission.INTERNET" />
添加DownloaderActivity
?
[Copy to clipboard]
View Code
XML
android:name="DownloaderActivity"

            android:label="@string/download_activity_title"

            android:configChanges="orientation|keyboardHidden"

            android:launchMode="singleTask" />
第四步,
依据下列格式创建一个Config文件,其中包含了需要下载的文件列表和版本号等。
?
[Copy to clipboard]
View Code
XML
version="1.0">

   src="url-of-source-file" dest="relative-path-on-sd-card"

      size="1234" md5="..." />

   dest="relative-path-on-sd-card">

     src="url-of-first-part-of-file" size="1234" md5="..." />

     src="url-of-second-part-of-file" />

    ...

  >
这是例子中所使用的config文件(其中包含两个格式 – 某些服务器屏蔽了使用*.config文件的权限,可以更换为xml后缀)
config.rar
Password:androidres
额外对上边所出现标签的说明:

  • version: 用于与传递到DownloaderActivity.ensureDownloaded()方法中的CONFIG_VERSION参数进行比对。
  • src: 可以使用相对地址或者绝对地址来提供文件源。
  • dest: 用于与传递到DownloaderActivity.ensureDownloaded()方法中的DATA_PATH参数进行比对。
  • size: 作为一个可选参数,用于注释文件大小。如果包含了size参数,那么将会对之后的操作提高一定的效率。
  • md5: 也是一个可供选择的参数,主要是用来确保从外部所得到的数据被准确的保存在本地存储设备中。

注意:每个file都可以包含多个子标签 “part” ,其可以方便的对一个庞大的数据文件群,单独的标识文件基本信息。
第五步,
将之前创建的Config文件和其中所列举的实际文件上传到服务器中指定的地址中。
第六步,
检查SD Card在当前设备中是否可用,对于应用模拟器的朋友可以根据本站所提供的教程来
创建虚拟SD Card

第七步,
编译!感觉Loading跳动的脉搏…


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/85193/showart_2107827.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP