Activity :
活动是最基本的Android 应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动
都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对
事件做出响应。大多数的应用是由多个屏幕显示组成。例如:一个文本信息的应用也许有一个显示发送消息的
联系人列表屏幕,第二个屏幕用来写文本消息和选择收件人,再来一个屏幕查看消息历史或者消息设置操作
等。这里每一个这样的屏幕就是一个活动,很容易实现从一个屏幕到一个新的屏幕并且完成新的活动。在某
些情况下当前的屏幕也许需要向上一个屏幕活动提供返回值--比如让用户从手机中挑选一张照片返回通讯录
做为电话拨入者的头像。
当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前
一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android 将会保留从主屏幕到每一
个应用的运行屏幕。
简单理解Activity 代表一个用户所能看到的屏幕,Activity 主要是处理一个应用的整体性工作,例如,监
听系统事件(按键事件、触摸屏事件等)、为用户显示指定的View,启动其他Activity 等。所有应用的Activity
都继承于android.app.Activity 类,该类是Android 提供的基层类,其他的Activity 继承该父类后,通过Override
父类的方法来实现各种功能,这种设计在其他领域也较为常见。
Intent :
调用Android 专有类Intent 进行架构屏幕之间的切换。Intent 是描述应用想要做什么。Intent 数据结构两
个最重要的部分是动作和动作对应的数据。典型的动作类型有:MAIN(活动的门户)、VIEW、PICK、EDIT
等。而动作对应的数据则以URI 的形式进行表示。例如:要查看某个人的联系方式,你需要创建一个动作类
型为VIEW 的Intent,以及一个表示这个人的URI。
Android 使用了Intent 这个特殊类,实现在屏幕与屏幕之间移动。Intent 类用于描述一个应用将会做什么
事。在Intent 的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有:M AIN(activity
的门户)、VIEW、PICK、EDIT 等。而动作对应的数据则以URI 的形式进行表示。例如:要查看一个人的联
系方式,你需要创建一个动作类型为VIEW 的intent,以及一个表示这个人的URI。
与之有关系的一个类叫IntentFilter。相对于intent 是一个有效的做某事的请求,一个intentfilter 则用于描
述一个activity(或者IntentReceiver)能够操作哪些intent。一个activity 如果要显示一个人的联系方式时,需
要声明一个IntentFilter,这个IntentFilter 要知道怎么去处理VIEW 动作和表示一个人的URI。IntentFilter 需
要在AndroidManifest.xml 中定义。
通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity 将会调用
startActivity(IntentmyIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter 中查找,找到最
匹配myIntent 的Intent 对应的activity。新的activity 接收到myIntent 的通知后,开始运行。当startActivity 方
法被调用将触发解析myIntent 的动作,这个机制提供了两个关键好处:
-----------------------------------Android 编程基础
16
A、Activities 能够重复利用从其它组件中以Intent 的形式产生的一个请求;
B、Activities 可以在任何时候被一个具有相同IntentFilter 的新的Activity 取代。
IntentReceiver:
当你希望你的应用能够对一个外部的事件(如当电话呼入时,或者数据网络可用时,或者到了晚上时)做出响
应,你可以使用一个IntentReceiver。虽然IntentReceiver 在感兴趣的事件发生时,会使用NotificationManager
通知用户,但它并不能生成一个UI。IntentReceiver 在AndroidManifest.xml 中注册,但也可以在代码中使用
Context.registerReceiver()进行注册。当一个intentreceiver 被触发时,你的应用不必对请求调用intentreceiver,
系统会在需要的时候启动你的应用。各种应用还可以通过使用Context.broadcastIntent()将它们自己的
intentreceiver 广播给其它应用程序。
Service :
一个Service 是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中
播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放
歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该
还在播放的。在这个例子中,媒体播放器这个activity 会使用Context.startService()来启动一个service,从而
可以在后台保持音乐的播放。同时,系统也将保持这个service 一直执行,直到这个service 运行结束。另外,
我们还可以通过使用Context.bindService()方法,连接到一个service 上(如果这个service 还没有运行将启动
它)。当连接到一个service 之后,我们还可以service 提供的接口与它进行通讯。拿媒体播放器这个例子来说,
我们还可以进行暂停、重播等操作。
Content Provider :
Android 应用程序能够将它们的数据保存到文件、SQLite 数据库中,甚至是任何有效的设备中。当你想
将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准的
方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。
数据是应用的核心。在Android 中,默认使用鼎鼎大名的SQLite 作为系统DB。但是在Android 中,使用方
法有点小小的不一样。在Android 中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数
据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难(正常情况下,你不能读取
其他的应用的db 文件),ContentProvider 正是用来解决在不同的应用包之间共享数据的工具。
� 所有被一个Android 应用程序创建的偏好设置,文件和数据库都是私有的。
� 为了和其他应用程序共享数据,应用程序不得不创建一个Content Provider
� 要回索其他应用程序的数据,它自己的Content Provider 必须被调用
� Android 本地Content Provider 包括:
� CallLog:地址和接收到的电话信息
� Contact.People.Phones:存储电话号码
� Setting.System:系统设置和偏好设置
� 等等
众所周知,对于一个手机,能拨打电话是其最重要也是最常用的一个功能.而在Android里是怎么样实现拨打电话的程序呢?我在这里写了一个简单的拨打电话的Demo,供大家参考.一共分为5个步骤.
Step 1:新建一个Android工程,命名为phoneCallDemo.
Step 2:设计程序的界面,打开main.xml把内容修改如下:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Please input the phoneNumer:"
/>
<EditText
android:id="@+id/et1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:phoneNumber="true"
/>
<Button
android:id="@+id/bt1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Call Phone"
/>
</LinearLayout>
Step 3:增加拨打电话的权限,打开AndroidManifest.xml,修改代码如下:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.test"
android:versionCode="1"
android:versionName="1.0">
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".PhoneCallDemo"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
<uses-sdk android:minSdkVersion="3" />
<!-- 添加拨出电话的权限 -->
<uses-permission android:name="android.permission.CALL_PHONE">
</uses-permission>
</manifest>
Step 4:主程序phoneCallDemo.java代码如下:
package com.android.test;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class PhoneCallDemo extends Activity {
private Button bt;
private EditText et;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//取得资源
bt = (Button)findViewById(R.id.bt1);
et = (EditText)findViewById(R.id.et1);
//增加事件响应
bt.setOnClickListener(new Button.OnClickListener(){
@Override
public void onClick(View v) {
//取得输入的电话号码串
String inputStr = et.getText().toString();
//如果输入不为空创建打电话的Intent
if(inputStr.trim().length()!=0)
{
Intent phoneIntent = new Intent("android.intent.action.CALL",
Uri.parse("tel:" + inputStr));
//启动
startActivity(phoneIntent);
}
//否则Toast提示一下
else{
Toast.makeText(PhoneCallDemo.this, "不能输入为空", Toast.LENGTH_LONG).show();
}
}
});
}
}
Android的开发现在是如火如荼,逞现在不是很忙了,学习了下,这里记录下了在windows在如何搭建Android开发环境,对自己是个记录,对新入门的兄弟姐妹们可以参考一下!可以参考这个网址:http://www.iplaysoft.com/android-emulator.html
(1)安装JDK,省略。
(2)下载Android SDK并配置。
可以到http://www.android123.com.cn/sdkxiazai/上下载,下载好后,解压缩,配置SDK,在Windows机器上,右键单击我的电脑,选择属性->高级,点“环境变量”按钮,修改“系统变量”下面的Path变量,把SDK tools的真实路径加入其中(即Android sdk 解压后的文件夹下的tool路径 在这里我是D:\android-sdk_r04-windows\android-sdk-windows\tools)。添加完后,可以在命令行下用命令测试:android --help,如果出现android的帮助命令就说明配置好了。
(3)安装MyEclipse,我用的是6.5,其他版本应该差不多,安装步骤省略。
(4)安装ADT(Android Development Tools).
启动MyEclipse,在导航菜单中选择Help->Software Updates->Find and Install->Search for new features to install->New Remote Site.然后输入name:anroid(随便) url:https://dl-ssl.google.com/android/eclipse/。ok!都选中,然后安装。安装完毕后,重启MyEclipse。
(5)在myeclipse里配置SDK路径
选择Windows->Preferences->Android,选择Android SDK的位置。我的是解压在D:\android-
sdk_r04-windows\android-sdk-windows这里的,选择这里就行了。如图:
(6)创建AVD(Android Virtual Device).
刚下载的2.1 SDK的platforms目录是空的,所以,当cmd 进入到D:\android-sdk_r04-windows\android-sdk-windows\tools目录下,输入命令android list target(这个命令可以获得Android可用的虚拟设备)得到的Available Android targets为空;那需要自己安装了,用myeclipse来帮你。选择Window->Android SDK and AVD Manager->Available Packages,点开右边的树中选择需要的SDK Platform和对应的Android APIs。这里我选择最新2.1版本的,然后就Install Select。如图所示:
安装完后,选择Window->Android SDK and AVD Manager->Vitual Devices,右边点New,按要求输入。name:android21(启动模拟器的时候需要敲的)Target:android 2.1-API Level 7(这里可以选择其它版本的,前提是你是否都更新了呢!我这里只能选择这个),SD Card:输入你想要的大小。其他默认就可以了,完后点Create AVD。这时,再命令行下进入到D:\android-sdk_r04-windows\android-sdk-windows\tools目录下,输入命令android list target得到的Available Android targets就有东西了。
(7)启动模拟器。
cmd进入到D:\android-sdk_r04-windows\android-sdk-windows\tools,输入命令:emulator -avd android21。这里用到你刚才起到
的名字,ok看到模拟器了吧!如图:
(8)程序界的奇葩:Hello World
学习新东西,这个是少不了的了,呵呵!
8.1创建一个新的Android项目
打开Eclipse, 选择File > New > Project如果Android的Eclipse的插件正确安装了,弹出的对话框里就会有一项“Android”, 选择 “Android Project”,点下一步。
8.2填写工程的详细信息。
除了包名外,我们可以全部填写HelloWorld。这里填写的Activity name就是你的项目创建好后Activity的类名。
8.3创建好后,工程会自动生成一个HelloWorld类,在你刚才创建的包名下找到HelloWorld,修改如下:
public class HelloWorld extends Activity {
/** 活动第一次被创建后调用 */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
TextView tv = new TextView(this);
tv.setText("Hello, World!");
setContentView(tv);
}
}
引入包时,可以用快捷键Ctrl+Shift+o。
8.4运行你的Hello World。
选择Run>->Open Run Dialog菜单。双击Android Application创建一个新的应用,然后在右边浏览选择你的应用HelloWorld,然后果断的Run吧,ok,过一会儿(模拟器启动有点时间),看到Hello, World!了吧。
SDK下有好多学习的例子,一旦入门后,就参照着Sample下的应用开始深入的学习吧!