Chinaunix首页 | 论坛 | 博客
  • 博客访问: 525007
  • 博文数量: 150
  • 博客积分: 5000
  • 博客等级: 大校
  • 技术积分: 1705
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-11 23:29
文章分类

全部博文(150)

文章存档

2011年(9)

2010年(25)

2009年(94)

2008年(22)

我的朋友

分类: LINUX

2009-12-01 00:31:01

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

Androidres downloader

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

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.    "";
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

? XML
 android:name="android.permission.INTERNET" />

添加DownloaderActivity

? XML
 android:name="DownloaderActivity"
 
            android:label="@string/download_activity_title"
 
            android:configChanges="orientation|keyboardHidden"
 
            android:launchMode="singleTask" />

第四步,

依据下列格式创建一个Config文件,其中包含了需要下载的文件列表和版本号等。

? 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后缀)
Password:androidres
额外对上边所出现标签的说明:

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

注意:每个file都可以包含多个子标签 “part” ,其可以方便的对一个庞大的数据文件群,单独的标识文件基本信息。

第五步,

将之前创建的Config文件和其中所列举的实际文件上传到服务器中指定的地址中。

第六步,

检查SD Card在当前设备中是否可用,对于应用模拟器的朋友可以根据本站所提供的教程来。

第七步,

编译!感觉Loading跳动的脉搏…

阅读(488) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~