11月 092012
 

1. 下载和安装JDK

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index.html

jdk_down_list

点击链接进入下载页面

接受授权协议并点击相应的版本进行下载

install jdk

运行安装程序,并根据提示一步一步进行安装

2.下载Android SDK

打开页面http://developer.android.com/sdk/index.html下载并安装Android SDK

3. 下载Eclipse

Eclipse下载地址http://www.eclipse.org/downloads/,打开页面根据自己的需要选择相应的版本,初学者可能会对Eclipse的版本非常的迷惑,下面笔者做些简单的介绍

eclipse download list
eclipse download list
A. 安装包的种类

在下载页面,大家可以看到Eclipse IDE for Java EE Developers、Eclipse IDE for Java Developers、Eclipse IDE for C/C++ Developers等等,其实这些不同的安装包都是用的一样的Eclipse核心,不同的是各个包所包含的模块各不相同,具体的模块包含情况大家可以查看这个页面http://www.eclipse.org/downloads/compare.php。大家可以选择适合自己的包进行下载,如果需要其他的模块以后是可以在Eclipse中进行更新下载的。

默认放在第一个的是Eclipse IDE for Java EE Developers,如果不知道选择哪个包就选择这个就可以了。

B. Eclipse的版本和别名
  • Eclipse Juno(2012 – V4.2)
  • Eclipse Indigo(2011 – V3.7)
  • Eclipse Helios(2010 – V3.6)
  • Eclipse Galileo(2009 – V3.5)
  • Eclipse Ganymede(2008 – V3.4)
  • Eclipse Europa(2007 – V3.3)
eclipse download version list
eclipse download version list

具体细节大家可以看这个页面http://wiki.eclipse.org/Older_Versions_Of_Eclipse

4. 下载Eclipse插件For Android

JDK安装完毕,解压Eclipse压缩包,可以启动Eclipse啦!下面介绍如何在Eclipse中下载和安装Android插件的方法。

打开Eclipse,第一次打开的时候后提醒你设置WorkSpace路径,即项目文件默认的存放目录,设置成你自己使用的路径即可。Eclipse打开后,执行菜单Help->Install New SoftWare,这时弹出一个Install窗口,在Work WIth里输入https://dl-ssl.google.com/android/eclipse/,然后点击右边的“ADD”按钮,在弹出的窗口中输入这个更新的名字,名字随意,笔者输入的为”Android SDK”,点“确定”按钮。

此时在Install窗口中间的列表中应该显示可以下载的文件列表,如果列表没有显示出来请使用后面的内容进行处理。

如果列表没有加载进来,说明下载更新信息失败,因为dl-ssl.google.com这个域名在国内被屏蔽了,所以有的时候访问有些问题,可以尝试下面方法解决

a. 修改C:WindowsSystem32driversetchosts文件,在文件内添加一行内74.125.237.1 dl-ssl.google.com

如果下载过程中提示Warning: You are installing software that contains unsigned content. The authenticity or validity of this software cannot be established. Do you want to continue with the installation?直接点OK忽略即可。

选择要安装的项目,点击”Next”按钮,Eclipse检查系统环境,检查完毕再点击“Next”按钮,选中”I accept the terms of the license agreement.”,点击“Finish”按钮就开始下载了。

如果用http地址的方式下载不了,你也可以百度搜索“adt离线包”,点击“Add”按钮后,输入“Name”,然后点击“Archive”按钮,选择下载的离线包进行安装。

其他说明:

1. 如果安装Android SDK时提示没有找到JDK,需要设置环境变量java_home,则按如下方式操作:打开系统环境变量设置,增加系统变量JAVA_HOME值为JDK的路径,如果没有CLASSPATH项,增加CLASSPATH设置值为%JAVA_HOME%lib,如果已经有CLASSPATH则修改此项增加%JAVA_HOME%lib用分号隔开

2. 如果安装完毕后出现一些其他的问题,则下载个旧版本的Eclipse试试

8月 202012
 

* 本例使用ListView和自定义的行部局实现了一个最基本的表格部局
* 和一个可变长度的表格部局
* 并实现的简单的行组件的单击事件

XML文件1 activity_list_view_table.xml

XML文件2 listview_row_basic.xml

XML文件3 listview_row.xml

JAVA代码文件 ListViewTableActivity.java

———————————

点击此下下载源代码

———————————

8月 092012
 

本例主要是使用了Intent对象的隐式调用方式,设置intent的Action, Data和Extra来传递的相关的信息

activity布局代码如下:

类代码如下:

本代码调试环境:

* Eclipse: Indigo Service Release 2
* Android SDK: 4.0(API LEVEL 14)

点击这里下载CallMailApp

注意:

1. 如果你还没有在你的手机或者AVD上创建相关的email帐户,运行此程序时会提示Unsupported action(不支持的Action)!

8月 082012
 

1、为什么要使用service?

在我们开发的应用中,有的时候需要做一些长期运行的任务,比如下载文件、音乐播放器、闹钟或者邮件程序等。由于Android系统会根据系统资源使用情况自动清理闲置的后台程序,所以普通的Activity程序在运行一段时间后就有可能被系统清理掉,不能达到长期运行的效果。而包含service的进程属于优先权比较高的(关于进程的生命周期相关知识请点击这里查看)不容易被系统清理掉,所以对那些应用来说,选择service是必要的。

2、创建一个Service

在工程节点或者包节点上右键,选择”New->Class”,输入包名,类名称,SuperClass输入或者选择android.app.Service,点击ok,创建一个服务类成功,创建完成后初始化代码如下:

创建完成后还无法使用此服务,需要在AndroidManifestXml中声明该服务类,示例如下:

3、服务类的一些重要方法

getApplication()

Return the application that owns this service.
onBind(Intent intent)

Return the communication channel to the service.
onConfigurationChanged(Configuration newConfig)

Called by the system when the device configuration changes while your component is running.
onCreate()

Called by the system when the service is first created.
onDestroy()

Called by the system to notify a Service that it is no longer used and is being removed.
onLowMemory()

This is called when the overall system is running low on memory, and actively running processes should trim their memory usage.
onRebind(Intent intent)

Called when new clients have connected to the service, after it had previously been notified that all had disconnected in itsonUnbind(Intent).
onStart(Intent intent, int startId)

This method was deprecated in API level 5. Implement onStartCommand(Intent, int, int) instead.
onStartCommand(Intent intent, int flags, int startId)

Called by the system every time a client explicitly starts the service by calling startService(Intent), providing the arguments it supplied and a unique integer token representing the start request.
onTaskRemoved(Intent rootIntent)

This is called if the service is currently running and the user has removed a task that comes from the service’s application.
onTrimMemory(int level)

Called when the operating system has determined that it is a good time for a process to trim unneeded memory from its process.
onUnbind(Intent intent)

Called when all clients have disconnected from a particular interface published by the service.
startForeground(int id, Notification notification)

Make this service run in the foreground, supplying the ongoing notification to be shown to the user while in this state.
stopForeground(boolean removeNotification)

Remove this service from foreground state, allowing it to be killed if more memory is needed.
stopSelf()

Stop the service, if it was previously started.
stopSelf(int startId)

Old version of stopSelfResult(int) that doesn’t return a result.
stopSelfResult(int startId)

Stop the service if the most recent time it was started was startId.

4、Service的调用方法

Service可能通过两种方法启动,一种是通过startService另外一种是通过bindService

1) startServie的声明如下:public abstract ComponentName startService (Intent service)

参数说明:service是你要启动的服务对象,通过Intent构造,你可以在Intent对象中加入其他需要的参数,以在服务中使用。执行此函数后,如果服务未启动则系统会创建此服务并执行,如果执行此函数时服务已经在运行,则服务会继续执行。

每次调用startService时都会触发服务内的android.app.Service.onStartCommand方法,此机制提供一个方便的方法通过Intent参数传入一些需要的参数,以避免必须再使用BindService才能实现的功能。

终止由startService启动的服务方法:一种是可以在服务内部调用stopSelf()来停止服务,另一种是在调用startService的context中通过调用stopService来终止

2) bindService声明如下:public abstract boolean bindService (Intent service, ServiceConnection conn, int flags)

参数说明:
service: 是要绑定的服务的实例标识,
conn: 用于接收成功绑定或者结束绑定时的通知,在连接时可以接收service返回的对象,
flags: 为绑定选项,可能为0, BIND_AUTO_CREATE, BIND_DEBUG_UNBIND, BIND_NOT_FOREGROUND, BIND_ABOVE_CLIENT, BIND_ALLOW_OOM_MANAGEMENT, BIND_WAIVE_PRIORITY.

对于由startService启动的服务,也可以使用此函数进行绑定。如果服务没有启动,可以设置flags为BIND_AUTO_CREATE,这样执行此函数时服务会被自动创建。

只有当调用该服务存在的时候系统才认为该服务有必须继续执行代码,比如当调用该服务的Activity停止或者销毁后它绑定的服务也会停止工作。所以在执行长期操作的时候不要在bindService中执行,即不要在Service的onbind函数中启动相应的定时器,否则当activity结束后,该定时器也会不再执行工作,而应该先用startService启动服务,并在服务的onStartCommand中执行定时器操作。

 

注意:

1、在使用一个service前必须在AndroidManifest.xml中定义该服务类名称,如:<service android:name=”Em8CheckerService”></service>

7月 162012
 

1. App crashes when it starts, because I make a error to set TextView.textcolor to a String resource Value, it should be a drawable resource value

2. I wrote a function which used Context of the activity. But when I finished coding, eclipse gave an error message. After a about 1 hour research, I finally found I wrote the function in the subclass of the activity. After moving the function to the main class, it works.

3. (be continued…)

 Posted by on 2012-07-16
7月 162012
 

When I gave a margin value 10 to TextView, the eclipse give a below error message.

error: Error: Integer types not allowed (at ‘layout_margin’ with value ’10’).

I searched on internet, and found can’t give a integer value to it, should use 10dip.

 Posted by on 2012-07-16

StrictMode of android

 分类:Android 阅读 (1,655)  No Responses »
7月 122012
 

StrictMode is a developer tool which used to detect accident in program. For example, if you do internet access or local file operation in the UI directly, the strictmode mechanism will throw an error to the application.

StrictMode is used default since Android 3.0(HoneyComb).

example of a wrong case

If you request an url like above, your app will crashes.

So the right thing we do this is we can run the internet request in thread(Threads, AsyncTask, Handler), I give a simple by AsyncTask.

It looks very troublesome when we just debug the program, so we can also use a simple code to disable ThreadPolicy to avoid errors.