逛javaEye论坛时,无意中发现个拉人翻译书的帖子。哈,这注意不错。记得刚进大学的时候,看到有篇写大学期间应该干什么的文章就写了,大学期间最好能翻译上一两本书。虽然这次这个翻译不是我一个人去战斗,但也至少比没这样一个经历好吧。趁着兴致旺,试译了几段:
第二章
应用程序
Android中的应用程序是由manifest文件的内容定义的。每一个Android应用程序都会通过AndroidManifest.xml文件来声明它的Activity、切入点、通信层、权限和intent。以下四个基本building block组合构成了一个富Android应用程序: Activity:一个Android应用程序最基本的building block
Intent receiver:一个被动的对象加载器用来处理指定的任务
Service:一个没有用户界面的后台处理程序
Content Provider:一个基本的超类框架用来处理和存储数据
在本章,针对每一个block,我都会用一个有具体功能的示例来讲解。首先是Activity,它是一个单机Android应用程序的核心building block。获取Active 所有Android移动应用程序,至少在传统意义上讲,都是围绕在Activity周围运作的。如果你有在其它移动平台的开发经验,那么你会发现Android的Activity与BREW的applet和JavaMe的midlet很相似。当然,他们还是存在一些很重要的不同之处。
对比Android,BREW和JavaMe
一个BREW应用程序在绝大多数情况下,由一个单一的applet构成。该applet通过接收和发送事件同手机的其它部分通信。你可以将一个JavaMe应用程序看作是Midlet类的扩展,Midlet类已经实现了启动、停止、暂停、按键处理和其它手机程序互动的功能。一个JavaMe应用程序通常也是由一个单一的Midlet构成的。
一个Android应用程序可以有任意多个,通过AndroidManifest.xml文件向手机注册的Activity。Android的多Activity架构可以说是Android开发同其它平台开发最主要的区别了。单凭这一点,使得它更容易写模块化,条块分割的代码。在BREW和JavaMe中,开发者实现的大部分功能都在Midlet或applet的限定范围内。而在Android中,你也可以写一个Activity,content handler, intent receiver,或者service来处理几乎任何东西。一旦你写了一个Activity来处理文本文件,您可以在今后所有你写的应用程序中,通过发送和接收intent指令来使用这个Activity。这并不是说,这种结构在BREW或Java ME中是不可能的。它只是必须通过Java,C或C++层来实现,或在BREW中,通过繁琐的扩展,而不是平稳地建立到应用程序框架中。
函数
就像Midlet那样,Activity通过调用一系列的函数同外部世界互动。基于这一点,你的Activity必须重写onCreate方法。其它你可能需要重写的方法有onStop, onPause, onResume, 和 onKeyDown。这些方法可以让你控制住你那在Android中四处乱跳的Activity。
默认情况下,通过Eclipse新建的Android应用程序会实现一个“Hello World”程序。我将向你展示如何从这样的一个基本的程序变到一个拥有完整功能的启动画面。
实现启动画面
如果你想把它当作你自己的Android应用程序的起点,或是你想遵循一种更被动的方式,你可以从www.apress.com的下载节点下载到这个启动画面示例的打包好的版本。正因为这是你的第一个实例,我会将它分解成一系列的小步骤慢慢讲解。但在以后的示例中,我不会再这么详细了。这一章应该是唯一一章读起来像初学者教程的章节了。
添加图片资源
首先你需要一张示例图片。我所用的“socially awkward” 可能无法赢得任何赞赏,但它确实揭示了一个现实:鲁莽的社交网络正不断地出现在移动空间中。为了添加这个新的资源,我把menu_background.jpg放在了res/drawable中. 确保有一个新的ID被添加到了R.java中.它看起来就像这样:
public static final int menu_background=0x7f020001;
这就是你现在添加图片到代码里的方式。在下一章涉及到用户交互的时候,我们还会回到这个方法上来。
创建一个XML布局文件
现在你已经有了一个图像资源,你可以把它添加到XML布局文件中来。这些文件保存在res/layout/目录中, 你现在应该已经有了一个main.xml文件.添加一个新的XML文件,起名为splash.xml,并且将main.xml中的内容拷贝到这个新建的文件中去。接着,如下面代码所示进行修改:
<ImageView
android:src=/blog_article/”@drawable/menu_background”_/p/index.html>
android:layout_width="fill_parent"
android:layout_height="fill_parent">
</ImageView>
使用Android的XML布局对象简单而且直接。就像上面提到的,保存在/res路径下的资源可以通过@标记来引用,例如:android:src=/blog_article/”@drawable/menu_background”。另外,layout_width和layout_height属性用来指定图像视图的尺寸。请确保你的布局文件已被添加到R.java中,它应该看起来像这样:_/p/index.html>
public static final int splash=0x7f030001;
展现启动画面
到目前为止,我们的启动画面已经定义好了,是展现它的时候了。你现在的Android程序所展示的还是main.xml布局,所以现在要转换一下,修改onCreate方法中的这句代码:
setContentView(R.layout.main); 变为:setContentView(R.layout.splash);
启动应用程序,观赏一下你的作品吧。如果出现什么错误,请检查一下图片是不是被正确地安放在了res/drawable文件夹中,布局文件是否引用了正确的文件名。
不管质量怎样,今天收到了wiki账号,我有直接编辑的权限了。大伙如果想了解最新的翻译结果,请直接访问:Android Book
最近需要开发一个短信平台,所以这两天在网上看了些这方面的资料
了解了一点目前电信在短信方面的Web Service规范。今天终于用MyEclipse搭建了短信开发的测试平台。
由于这里不能贴图,所以把步骤写到Word文档里,上传。
今天在做魔橙推送邮时遇到一个奇怪的问题,在安装jar时总是提示"jar文件无效",在文夹里有两个jar,一个jad文件,它们同属于一个项目打成不同的包,只是安装包包名不同罢了,后来安装一个没有jad文件的jar,死活提示“jar文件无效”,于是干脆把文件夹里的所有文件全删了,只放一个jar文件重新安装,好了,不会再提示“jar文件无效”,还有在N73上用蓝牙传jar,安装时也会提示文件无效,非得把它放在内存才行。
安装JAD时提示JAD无效原因之一
导读
安装Jar提示“jar文件无效”的另一个奇怪原因 http://fonter.iteye.com/blog/414188
J2ME代码认证证书的支持情况 http://fonter.iteye.com/blog/413357
S40平台播放多媒体时内存优化 http://fonter.iteye.com/blog/413022
SUN的J2ME源代码下载 http://fonter.iteye.com/blog/412094
J2ME也玩GZIP,哈哈!http://fonter.iteye.com/blog/411284
开源一个J2ME解析类 http://fonter.iteye.com/blog/409830
MIDlet-Name: UCWEB6
MIDlet-Version: 6.0.0
MIDlet-Vendor: UCFLY
MIDlet-Jar-URL: http://down2.ucweb.com/jar/UCWEB-60-800-69-080305.jar
MIDlet-Jar-Size: 207887
MIDlet-Description: UCFLY
MIDlet-Icon: /l.png
MIDlet-Data-Size: 32768
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.0
MIDlet-1: UCWEB6,/l.png,WebClient
MIDlet-Permissions-Opt: javax.microedition.io.Connector.http,javax.microedition.io.Connector.https,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.file.write,javax.microedition.io.Connector.socket,javax.microedition.io.PushRegistry,javax.microedition.io.sms,javax.wireless.messaging.sms.send,javax.wireless.messaging.sms.receive
Background: True
m_ch: chens@zxlintwap
MIDlet-Name: UCWEB6
MIDlet-Version: 6.0.0
MIDlet-Vendor: UCFLY
MIDlet-Jar-URL: http://down2.ucweb.com/jar/UCWEB-60-800-69-080305.jar
MIDlet-Jar-Size: 207887
MIDlet-Description: UCFLY
MIDlet-Icon: /l.png
MIDlet-Data-Size: 32768
MicroEdition-Profile: MIDP-2.0
MicroEdition-Configuration: CLDC-1.0
MIDlet-1: UCWEB6,/l.png,WebClient
MIDlet-Permissions-Opt: javax.microedition.io.Connector.http,javax.microedition.io.Connector.https,javax.microedition.io.Connector.file.read,javax.microedition.io.Connector.file.write,javax.microedition.io.Connector.socket,javax.microedition.io.PushRegistry,javax.microedition.io.sms,javax.wireless.messaging.sms.send,javax.wireless.messaging.sms.receive
Background: True
m_ch: chens@zxlintwap
我也觉得奇怪,用jad安装不会有问题,感觉不是JAD问题,可能是同一个项目的不同包放在一起的原因吧!具体也说不上在那出了问题,只能把安装包放在不同的文件夹里~
因为1楼用了UCWEB做为示例而以