Activity 是用户唯一可以看得到的东西。几乎所有的activity都与用户进行交互,所以Activity主要负责的就是创建显示窗口,你可以在这些窗口里使用setContentView(View)来显示你自己的UI。
如果要使用 Context.startActivity()来启动activity, activity都必须在启动者应用包的AndroidManifest.xml
文件中
有对应的
这里有三个比较关键的生命周期。
public class Activity extends ApplicationContext {
protected void onCreate(Bundle icicle);
protected void onStart();
protected void onRestart();
protected void onResume();
protected void onFreeze(Bundle outIcicle);
protected void onPause();
protected void onStop();
protected void onDestroy();
}
(此处译者进行了大块的修改,请参考原文阅读下面表格)
方法 |
描述 |
Killable? |
下一方法 |
||
onCreate() |
Activity初次创建时被调用,你应该在这里进行一般的静态设置:创建view、将数据绑定到list等等。如果activity之前存在冻结状态,那么此状态将在Bundle中提供。 如果activity首次创建,本方法后将会调用onStart(),如果activity是停止后重新显示,则将调用onRestart()。 |
No |
|
||
|
onStart() |
当activity对用户即将可见的时候调用。 其后调用onRestart()或onResume()(框架是否进行选择性调用onResume()仅仅是猜测) |
No |
|
|
onRestart() |
当activity从停止状态重新启动时调用。其后调用onResume()。 |
No |
|
||
|
onResume() |
当activity将要与用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经可以传递给它。 如果其他的activity在它的上方恢复显示,则将调用onFreeze()。 |
No |
|
|
onFreeze() |
当你的activity被暂停而其他的activity恢复与用户交互的时候这个方法会被调用(在其他activity显示之前),你可以使用这个方法保存你当前的用户状态(一般来说是当前实例的用户状态)。暂停之后,为了回收资源供给前景activity,系统会在需要的时间停止(或者kill)你的应用。以后如果你的activity启动一个新的实例重新与用户进行交互,你保存在这里的状态都将通过onCreate()方法传递给新的实例。 其后总是调用onPause()方法。 |
No |
|
||
onPause() |
当系统要启动一个其他的activity时调用(其他的activity显示之前),这个方法被用来提交那些持久数据的改变、停止动画、和其他占用CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。 如果activity重新回到前景时将调用onResume(), 如果对用户彻底不可见则会调用onStop()。 |
Yes |
|
||
onStop() |
当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。 当activity重新回到前景与用户交互时调用onRestart(),如果activity将退出则调用onDestory()。 |
Yes |
|
||
onDestroy() |
在你的activity被销毁前所调用的最后一个方法,当进程终止时会出现这种情况(对activity直接调用finish()方法或者系统为了节省空间而临时销毁此activity的实例,你可以通过isFinishing()的返回值来区分这两种情况)。 |
Yes |
nothing |
在一些特殊的情况中,你可能希望当一种或者多种配置改变时避免重新启动你的activity。你可以通过在manifest中设置android:configChanges属性来实现这点。你可以在这里声明activity可以处理的任何配置改变,当这些配置改变时不会重新启动activity,而会调用activity的onConfigurationChanged(Resources.Configuration)方法。如果改变的配置中包含了你所无法处理的配置(在android:configChanges并未声明),你的activity仍然要被重新启动,而onConfigurationChanged(Resources.Configuration)将不会被调用。
startActivity(Intent)方法可以用来启动一个新的activity,这个activity将被放置在activity栈的栈顶。这个方法只有一个参数Intent,这个参数描述了将被执行的activity。
注意 我们每次在启动activity的时候 我们都会将Intent这个参数传递过去 进而我们就可以在被启动的Activity中获得我们的传递的Intent
有时候你希望在一个activity结束时得到它返回的结果。举个例子,你可能启动一个activity来让用户从通讯簿中选择一个人;当它结束的时候将会返回这个所选择的人。为了得到这个返回的信息,你可以使用startActivityForResult(Intent, int)这个方法来启动新的activity,第二个整形参数将会作为这次调用的识别标记。这个activity返回的结果你可以通过onActivityResult(int, int, String, Bundle)方法来获得,此方法的第一个参数就是之前调用所使用的识别标记。
当activity退出的时候,它可以调用setResult(int)来将数据返回给他的父进程。这个方法必须提供一个结果码,这个结果码可以使标准结果RESULT_CANCELED, RESULT_OK,也可以是其他任何从RESULT_FIRST_USER开始的自定义值。此外,它还可以返回一段字符串(经常是一段数据的URL地址),一个包含它所有希望值的Bundle。这些信息都会在父activity的回调函数Activity.onActivityResult()
中出现,并连同最初提供的识别标记一起(此处有些拗口,意思其实就是子activity返回的内容、返回码、识别标记都将作为参数,按照不同的返回情况来调用父activity的Activity.onActivityResult()方法,以实现出现各种返回时父activity做出响应的处理)。
系统Activity的跳转
1.从google搜索内容
Intent intent = new Intent();
intent.setAction(Intent.ACTION_WEB_SEARCH);
intent.putExtra(SearchManager.QUERY,”searchString”)
startActivity(intent);
2.浏览网页
Uri uri = Uri.parse(“http://www.google.com”);
Intent it = new Intent(Intent.ACTION_VIEW,uri);
startActivity(it);
3.显示地图
Uri uri = Uri.parse(“geo:38.899533,-77.036476″);
Intent it = new Intent(Intent.Action_VIEW,uri);
startActivity(it);
4.路径规划
Uri uri = Uri.parse(“http://maps.google.com/maps?” +
“f=dsaddr=startLat startLng&daddr=endLat endLng&hl=en”);
Intent it = new Intent(Intent.ACTION_VIEW,URI);
startActivity(it);
5.拨打电话
Uri uri = Uri.parse(“tel:xxxxxx”);
Intent it = new Intent(Intent.ACTION_DIAL, uri);
startActivity(it);
需要添加权限
6.调用发短信的程序
Intent it = new Intent(Intent.ACTION_VIEW);
it.putExtra(“sms_body”, “The SMS text”);
it.setType(“vnd.android-dir/mms-sms”);
startActivity(it);
7.发送短信
Uri uri = Uri.parse(“smsto:0800000123″);
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
it.putExtra(“sms_body”, “The SMS text”);
startActivity(it);
String body=”this is sms demo”;
Intent mmsintent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(“smsto”, number, null));
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, true);
mmsintent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, true);
startActivity(mmsintent);
8.发送彩信
Uri uri = Uri.parse(“content://media/external/images/media/23″);
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(“sms_body”, “some text”);
it.putExtra(Intent.EXTRA_STREAM, uri);
it.setType(“image/png”);
startActivity(it);
StringBuilder sb = new StringBuilder();
sb.append(“file://”);
sb.append(fd.getAbsoluteFile());
Intent intent = new Intent(Intent.ACTION_SENDTO, Uri.fromParts(“mmsto”, number, null));
// Below extra datas are all optional.
intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_SUBJECT, subject);
intent.putExtra(Messaging.KEY_ACTION_SENDTO_MESSAGE_BODY, body);
intent.putExtra(Messaging.KEY_ACTION_SENDTO_CONTENT_URI, sb.toString());
intent.putExtra(Messaging.KEY_ACTION_SENDTO_COMPOSE_MODE, composeMode);
intent.putExtra(Messaging.KEY_ACTION_SENDTO_EXIT_ON_SENT, exitOnSent);
startActivity(intent);
9.发送Email
Uri uri = Uri.parse(“mailto:[email protected]”);
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_EMAIL, “[email protected]”);
it.putExtra(Intent.EXTRA_TEXT, “The email body text”);
it.setType(“text/plain”);
startActivity(Intent.createChooser(it, “Choose Email Client”));
Intent it=new Intent(Intent.ACTION_SEND);
String[] tos={“[email protected]”};
String[] ccs={“[email protected]”};
it.putExtra(Intent.EXTRA_EMAIL, tos);
it.putExtra(Intent.EXTRA_CC, ccs);
it.putExtra(Intent.EXTRA_TEXT, “The email body text”);
it.putExtra(Intent.EXTRA_SUBJECT, “The email subject text”);
it.setType(“message/rfc822″);
startActivity(Intent.createChooser(it, “Choose Email Client”));
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, “The email subject text”);
it.putExtra(Intent.EXTRA_STREAM, “file:///sdcard/mysong.mp3″);
sendIntent.setType(“audio/mp3″);
startActivity(Intent.createChooser(it, “Choose Email Client”));
10.播放多媒体
Intent it = new Intent(Intent.ACTION_VIEW);
Uri uri = Uri.parse(“file:///sdcard/song.mp3″);
it.setDataAndType(uri, “audio/mp3″);
startActivity(it);
Uri uri = Uri.withAppendedPath(MediaStore.Audio.Media.INTERNAL_CONTENT_URI, “1″);
Intent it = new Intent(Intent.ACTION_VIEW, uri);
startActivity(it);
11.uninstall apk
Uri uri = Uri.fromParts(“package”, strPackageName, null);
Intent it = new Intent(Intent.ACTION_DELETE, uri);
startActivity(it);
12.install apk
Uri installUri = Uri.fromParts(“package”, “xxx”, null);
returnIt = new Intent(Intent.ACTION_PACKAGE_ADDED, installUri);
13. 打开照相机
Intent i = new Intent(Intent.ACTION_CAMERA_BUTTON, null);
this.sendBroadcast(i);
long dateTaken = System.currentTimeMillis();
String name = createName(dateTaken) + “.jpg”;
fileName = folder + name;
ContentValues values = new ContentValues();
values.put(Images.Media.TITLE, fileName);
values.put(“_data”, fileName);
values.put(Images.Media.PICASA_ID, fileName);
values.put(Images.Media.DISPLAY_NAME, fileName);
values.put(Images.Media.DESCRIPTION, fileName);
values.put(Images.ImageColumns.BUCKET_DISPLAY_NAME, fileName);
Uri photoUri = getContentResolver().insert(
MediaStore.Images.Media.EXTERNAL_CONTENT_URI, values);
Intent inttPhoto = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
inttPhoto.putExtra(MediaStore.EXTRA_OUTPUT, photoUri);
startActivityForResult(inttPhoto, 10);
14.从gallery选取图片
Intent i = new Intent();
i.setType(“image/*”);
i.setAction(Intent.ACTION_GET_CONTENT);
startActivityForResult(i, 11);
15. 打开录音机
Intent mi = new Intent(Media.RECORD_SOUND_ACTION);
startActivity(mi);
16. 打开另一程序
Intent i = new Intent();
ComponentName cn = new ComponentName(“com.yellowbook.android2″,
“com.yellowbook.android2.AndroidSearch”);
i.setComponent(cn);
i.setAction(“android.intent.action.MAIN”);
startActivityForResult(i, RESULT_OK);
17. 传送附件
Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_SUBJECT, “The email subject text”);
it.putExtra(Intent.EXTRA_STREAM, “file:///sdcard/mysong.mp3″);
sendIntent.setType(“audio/mp3″);
startActivity(Intent.createChooser(it, “Choose Email Client”));
系统action动作和服务广播
String ADD_SHORTCUT_ACTION 动作:在系统中添加一个快捷方式。. “android.intent.action.ADD_SHORTCUT”
String ALL_APPS_ACTION 动作:列举所有可用的应用。
输入:无。 “android.intent.action.ALL_APPS”
String ALTERNATIVE_CATEGORY 类别:说明 activity 是用户正在浏览的数据的一个可选操作。 “android.intent.category.ALTERNATIVE”
String ANSWER_ACTION 动作:处理拨入的电话。 “android.intent.action.ANSWER”
String BATTERY_CHANGED_ACTION 广播:充电状态,或者电池的电量发生变化。 “android.intent.action.BATTERY_CHANGED”
String BOOT_COMPLETED_ACTION 广播:在系统启动后。
这个动作被广播一次(只有一次)。 “android.intent.action.BOOT_COMPLETED”
String BROWSABLE_CATEGORY 类别:能够被浏览器安全使用的 activities 必须支持这个类别。 “android.intent.category.BROWSABLE”
String BUG_REPORT_ACTION 动作:显示 activity 报告错误。 “android.intent.action.BUG_REPORT”
String CALL_ACTION 动作:拨打电话。
被呼叫的联系人在数据中指定。 “android.intent.action.CALL”
String CALL_FORWARDING_STATE_CHANGED_ACTION 广播:语音电话的呼叫转移状态已经改变。 “android.intent.action.CFF”
String CLEAR_CREDENTIALS_ACTION 动作:清除登陆凭证 (credential)。 “android.intent.action.CLEAR_CREDENTIALS”
String CONFIGURATION_CHANGED_ACTION 广播:设备的配置信息已经改变,参见 Resources.Configuration. “android.intent.action.CONFIGURATION_CHANGED”
Creator CREATOR 无 无www.2cto.com
String DATA_ACTIVITY_STATE_CHANGED_ACTION 广播:电话的数据活动(data activity)状态(即收发数据的状态)已经改变。 “android.intent.action.DATA_ACTIVITY”
String DATA_CONNECTION_STATE_CHANGED_ACTION 广播:电话的数据连接状态已经改变。 “android.intent.action.DATA_STATE”
String DATE_CHANGED_ACTION 广播:日期被改变。 “android.intent.action.DATE_CHANGED”
String DEFAULT_ACTION 动作:和 VIEW_ACTION 相同,是在数据上执行的标准动作。 “android.intent.action.VIEW”
String DEFAULT_CATEGORY 类别:如果 activity 是对数据执行确省动作(点击, center press)的一个选项,需要设置这个类别。 “android.intent.category.DEFAULT”
String DELETE_ACTION 动作:从容器中删除给定的数据。 “android.intent.action.DELETE”
String DEVELOPMENT_PREFERENCE_CATEGORY 类别:说明 activity 是一个设置面板 (development preference panel). “android.intent.category.DEVELOPMENT_PREFERENCE”
String DIAL_ACTION 动作:拨打数据中指定的电话号码。 “android.intent.action.DIAL”
String EDIT_ACTION 动作:为制定的数据显示可编辑界面。 “android.intent.action.EDIT”
String EMBED_CATEGORY 类别:能够在上级(父)activity 中运行。 “android.intent.category.EMBED”
String EMERGENCY_DIAL_ACTION 动作:拨打紧急电话号码。 “android.intent.action.EMERGENCY_DIAL”
int FORWARD_RESULT_LAUNCH 启动标记:如果这个标记被设置。
而且被一个已经存在的 activity 用来启动新的 activity,已有 activity 的回复目标 (reply target) 会被转移给新的 activity。 16 0×00000010
String FOTA_CANCEL_ACTION 广播:取消所有被挂起的 (pending) 更新下载。 “android.server.checkin.FOTA_CANCEL”
String FOTA_INSTALL_ACTION 广播:更新已经被确认,马上就要开始安装。 “android.server.checkin.FOTA_INSTALL”
String FOTA_READY_ACTION 广播:更新已经被下载。
可以开始安装。 “android.server.checkin.FOTA_READY”
String FOTA_RESTART_ACTION 广播:恢复已经停止的更新下载。 “android.server.checkin.FOTA_RESTART”
String FOTA_UPDATE_ACTION 广播:通过 OTA 下载并安装操作系统更新。 “android.server.checkin.FOTA_UPDATE”
String FRAMEWORK_INSTRUMENTATION_TEST_CATEGORY 类别:To be used as code under test for framework instrumentation tests. “android.intent.category.FRAMEWORK_INSTRUMENTATION _TEST”
String GADGET_CATEGORY 类别:这个 activity 可以被嵌入宿主 activity (activity that is hosting gadgets)。 “android.intent.category.GADGET”
String GET_CONTENT_ACTION 动作:让用户选择数据并返回。 “android.intent.action.GET_CONTENT”
String HOME_CATEGORY 类别:主屏幕 (activity)。
设备启动后显示的第一个 activity。 “android.intent.category.HOME”
String INSERT_ACTION 动作:在容器中插入一个空项 (item)。 “android.intent.action.INSERT”
String INTENT_EXTRA 附加数据:和 PICK_ACTIVITY_ACTION 一起使用时,说明用户选择的用来显示的 activity;和 ADD_SHORTCUT_ACTION 一起使用的时候,描述要添加的快捷方式。 “android.intent.extra.INTENT”
String LABEL_EXTRA 附加数据:大写字母开头的字符标签,和 ADD_SHORTCUT_ACTION 一起使用。 “android.intent.extra.LABEL”
String LAUNCHER_CATEGORY 类别:Activity 应该被显示在顶级的 launcher 中。 “android.intent.category.LAUNCHER”
String LOGIN_ACTION 动作:获取登录凭证。 “android.intent.action.LOGIN”
String MAIN_ACTION 动作:作为主入口点启动,不需要数据。 “android.intent.action.MAIN”
String MEDIABUTTON_ACTION 广播:用户按下了“Media Button”。 “android.intent.action.MEDIABUTTON”
String MEDIA_BAD_REMOVAL_ACTION 广播:扩展介质(扩展卡)已经从 SD 卡插槽拔出,但是挂载点 (mount point) 还没解除 (unmount)。 “android.intent.action.MEDIA_BAD_REMOVAL”
String MEDIA_EJECT_ACTION 广播:用户想要移除扩展介质(拔掉扩展卡)。 “android.intent.action.MEDIA_EJECT”
String MEDIA_MOUNTED_ACTION 广播:扩展介质被插入,而且已经被挂载。 “android.intent.action.MEDIA_MOUNTED”
String MEDIA_REMOVED_ACTION 广播:扩展介质被移除。 “android.intent.action.MEDIA_REMOVED”
String MEDIA_SCANNER_FINISHED_ACTION 广播:已经扫描完介质的一个目录。 “android.intent.action.MEDIA_SCANNER_FINISHED”
String MEDIA_SCANNER_STARTED_ACTION 广播:开始扫描介质的一个目录。 “android.intent.action.MEDIA_SCANNER_STARTED”
String MEDIA_SHARED_ACTION 广播:扩展介质的挂载被解除 (unmount)。
因为它已经作为 USB 大容量存储被共享。 “android.intent.action.MEDIA_SHARED”
String MEDIA_UNMOUNTED_ACTION 广播:扩展介质存在,但是还没有被挂载 (mount)。 “android.intent.action.MEDIA_UNMOUNTED”
String MESSAGE_WAITING_STATE_CHANGED_ACTION 广播:电话的消息等待(语音邮件)状态已经改变。 “android.intent.action.MWI”
int MULTIPLE_TASK_LAUNCH 启动标记:和 NEW_TASK_LAUNCH 联合使用。
禁止将已有的任务改变为前景任务 (foreground)。 8 0×00000008
String NETWORK_TICKLE_RECEIVED_ACTION 广播:设备收到了新的网络 “tickle” 通知。 “android.intent.action.NETWORK_TICKLE_RECEIVED”
int NEW_TASK_LAUNCH 启动标记:设置以后,activity 将成为历史堆栈中的第一个新任务(栈顶)。 4 0×00000004
int NO_HISTORY_LAUNCH 启动标记:设置以后,新的 activity 不会被保存在历史堆栈中。 1 0×00000001
String PACKAGE_ADDED_ACTION 广播:设备上新安装了一个应用程序包。 “android.intent.action.PACKAGE_ADDED”
String PACKAGE_REMOVED_ACTION 广播:设备上删除了一个应用程序包。 “android.intent.action.PACKAGE_REMOVED”
String PHONE_STATE_CHANGED_ACTION 广播:电话状态已经改变。 “android.intent.action.PHONE_STATE”
String PICK_ACTION 动作:从数据中选择一个项目 (item),将被选中的项目返回。 “android.intent.action.PICK”
String PICK_ACTIVITY_ACTION 动作:选择一个 activity,返回被选择的 activity 的类(名)。 “android.intent.action.PICK_ACTIVITY”
String PREFERENCE_CATEGORY 类别:activity是一个设置面板 (preference panel)。 “android.intent.category.PREFERENCE”
String PROVIDER_CHANGED_ACTION 广播:更新将要(真正)被安装。 “android.intent.action.PROVIDER_CHANGED”
String PROVISIONING_CHECK_ACTION 广播:要求 polling of provisioning service 下载最新的设置。 “android.intent.action.PROVISIONING_CHECK”
String RUN_ACTION 动作:运行数据(指定的应用),无论它(应用)是什么。 “android.intent.action.RUN”
String SAMPLE_CODE_CATEGORY 类别:To be used as an sample code example (not part of the normal user experience). “android.intent.category.SAMPLE_CODE”
String SCREEN_OFF_ACTION 广播:屏幕被关闭。 “android.intent.action.SCREEN_OFF”
String SCREEN_ON_ACTION 广播:屏幕已经被打开。 “android.intent.action.SCREEN_ON”
String SELECTED_ALTERNATIVE_CATEGORY 类别:对于被用户选中的数据。
activity 是它的一个可选操作。 “android.intent.category.SELECTED_ALTERNATIVE”
String SENDTO_ACTION 动作:向 data 指定的接收者发送一个消息。 “android.intent.action.SENDTO”
String SERVICE_STATE_CHANGED_ACTION 广播:电话服务的状态已经改变。 “android.intent.action.SERVICE_STATE”
String SETTINGS_ACTION 动作:显示系统设置。输入:无。 “android.intent.action.SETTINGS”
String SIGNAL_STRENGTH_CHANGED_ACTION 广播:电话的信号强度已经改变。 “android.intent.action.SIG_STR”
int SINGLE_TOP_LAUNCH 启动标记:设置以后,如果 activity 已经启动。
而且位于历史堆栈的顶端,将不再启动(不重新启动) activity。 2 0×00000002
String STATISTICS_REPORT_ACTION 广播:要求 receivers 报告自己的统计信息。 “android.intent.action.STATISTICS_REPORT”
String STATISTICS_STATE_CHANGED_ACTION 广播:统计信息服务的状态已经改变。 “android.intent.action.STATISTICS_STATE_CHANGED”
String SYNC_ACTION 动作:执行数据同步。 “android.intent.action.SYNC”
String TAB_CATEGORY 类别:这个 activity 应该在 TabActivity 中作为一个 tab 使用。 “android.intent.category.TAB”
String TEMPLATE_EXTRA 附加数据:新记录的初始化模板。 “android.intent.extra.TEMPLATE”
String TEST_CATEGORY 类别:作为测试目的使用,不是正常的用户体验的一部分。 “android.intent.category.TEST”
String TIMEZONE_CHANGED_ACTION 广播:时区已经改变。 “android.intent.action.TIMEZONE_CHANGED”
String TIME_CHANGED_ACTION 广播:时间已经改变(重新设置)。 “android.intent.action.TIME_SET”
String TIME_TICK_ACTION 广播:当前时间已经变化(正常的时间流逝)。 “android.intent.action.TIME_TICK”
String UMS_CONNECTED_ACTION 广播:设备进入 USB 大容量存储模式。 “android.intent.action.UMS_CONNECTED”
String UMS_DISCONNECTED_ACTION 广播:设备从 USB 大容量存储模式退出。 “android.intent.action.UMS_DISCONNECTED”
String UNIT_TEST_CATEGORY 类别:应该被用作单元测试(通过 test harness 运行)。 “android.intent.category.UNIT_TEST”
String VIEW_ACTION 动作:向用户显示数据。 “android.intent.action.VIEW”
String WALLPAPER_CATEGORY 类别:这个 activity 能过为设备设置墙纸。 “android.intent.category.WALLPAPER”
String WALLPAPER_CHANGED_ACTION 广播:系统的墙纸已经改变。 “android.intent.action.WALLPAPER_CHANGED”
String WALLPAPER_SETTINGS_ACTION 动作:显示选择墙纸的设置界面。输入:无。 “android.intent.action.WALLPAPER_SETTINGS”
String WEB_SEARCH_ACTION 动作:执行 web 搜索。 “android.intent.action.WEB_SEARCH”
String XMPP_CONNECTED_ACTION 广播:XMPP 连接已经被建立。 “android.intent.action.XMPP_CONNECTED”
String XMPP_DISCONNECTED_ACTION 广播:XMPP 连接已经被断开。 “android.intent.action.XMPP_DI
通过Intent实现我们四大组件之间的数据传递
- 组件Activity
- 显式跳转: 程序的内部使用.
- 隐式跳转: 多个程序之间页面的跳转
- Intent传递数据: 八大基本类型和数组, ArrayList
- 回传数据.
- startActivityForResult 开启界面
- setResult 被开启界面设置结果
- onActivityResult 当被开启关闭时, 接收结果数据.
不同应用之间的跳转。
Intent intent = new Intent();
intent.setClassName("cn.com.thtf.tfpay",
"cn.com.thtf.tfpay.FindPwdInputPhoneActivity");
Bundle appbundle = new Bundle();
appbundle.putString("COMTO", "SDK");
intent.putExtras(appbundle);
startActivity(intent);
不同应用之间的跳转再思考。
activity详解 对api文档的详细认识:
activity的直接子类 包括 AcyivityGroup FragmentActivity ListActivity
间接子类包括 ActioBarActivity LauncherActivity PreferenceActivity TabActivity
注意 activity 就是一个可以与用户进行交互的界面 同时我们需要借助 setContentView来实现设置我们的界面显示, 一般情况下 他是一全屏的形式来展示的 但是我们可以借助 windowIsFloating 来设置它可以滚动 也可以借助 ActivityGroup实现将一个activity包裹进另外一个Activity中。
1:通过set方法 来实现我们的设置ui显示 通过findViewById获得组件 实现与用户的交互。
注意 我们在activity之间传递数据
you call the startActivityForResult(Intent, int)
The result will come back through your onActivityResult(int, int, Intent)
When an activity exits, it can call setResult(int)
to return data back to its parent.
例子如下:
public class MyActivity extends Activity { ... static final int PICK_CONTACT_REQUEST = 0; protected boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) { // When the user center presses, let them pick a contact. startActivityForResult( new Intent(Intent.ACTION_PICK, new Uri("content://contacts")), PICK_CONTACT_REQUEST); return true; } return false; } protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == PICK_CONTACT_REQUEST) { if (resultCode == RESULT_OK) { // A contact was picked. Here we will just display it // to the user. startActivity(new Intent(Intent.ACTION_VIEW, data)); } } } }
void | addContentView( View view, ViewGroup.LayoutParams params)
Add an additional content view to the activity.
|
Add an additional content view to the activity. Added after any existing ones in the activity -- existing views are NOT removed.
Calls getCurrentFocus()
on the Window of this Activity to return the currently focused view.
Return the FragmentManager for interacting with fragments associated with this activity.
Return the intent that started this activity.
Convenience for calling getLayoutInflater()
.
Retrieve a SharedPreferences
object for accessing preferences that are private to this activity. This simply calls the underlying getSharedPreferences(String, int)
method by passing in this activity's class name as the preferences name.
mode | Operating mode. Use MODE_PRIVATE for the default operation, MODE_WORLD_READABLE and MODE_WORLD_WRITEABLE to control permissions. |
---|
Return the handle to a system-level service by name. The class of the returned object varies by the requested name. Currently available names are:
WINDOW_SERVICE
("window")
WindowManager
. 这个就是获得窗体管理器
LAYOUT_INFLATER_SERVICE
("layout_inflater")
LayoutInflater
for inflating layout resources in this context. 也可以获得填充器
ACTIVITY_SERVICE
("activity")
ActivityManager
for interacting with the global activity state of the system.
VIBRATOR_SERVICE
("vibrator")
Vibrator
for interacting with the vibrator hardware.
INPUT_METHOD_SERVICE
("input_method")
InputMethodManager
for management of input methods.
Called when a key was pressed down and not handled by any of the views inside of the activity. So, for example, key presses while the cursor is inside a TextView will not trigger the event (unless it is a navigation to another object) because TextView handles its own key presses.
If the focused view didn't want this event, this method is called.
keyCode | The value in event.getKeyCode(). |
---|---|
event | Description of the key event. |
true
to prevent this event from being propagated further, or false
to indicate that you have not handled this event and it should continue to be propagated.
Default implementation of KeyEvent.Callback.onKeyLongPress()
: always returns false (doesn't handle the event).
keyCode | The value in event.getKeyCode(). |
---|---|
event | Description of the key event. |
长按事件的处理。
Called when a key was released and not handled by any of the views inside of the activity. So, for example, key presses while the cursor is inside a TextView will not trigger the event (unless it is a navigation to another object) because TextView handles its own key presses.
The default implementation handles KEYCODE_BACK to stop the activity and go back.
keyCode | The value in event.getKeyCode(). |
---|---|
event | Description of the key event. |
true
to prevent this event from being propagated further, or false
to indicate that you have not handled this event and it should continue to be propagated.onKeyDown(int, KeyEvent)
KeyEvent
点击键 按起的时候触发的事件
Called when a touch screen event was not handled by any of the views under it. This is most useful to process touch events that happen outside of your window bounds, where there is no view to receive it.
event | The touch screen event being processed. |
---|
随后 我们就会执行这个方法。
Called when the current Window
of the activity gains or loses focus. This is the best indicator of whether this activity is visible to the user. The default implementation clears the key tracking state, so should always be called.
Note that this provides information about global focus state, which is managed independently of activity lifecycles. As such, while focus changes will generally have some relation to lifecycle changes (an activity that is stopped will not generally get window focus), you should not rely on any particular order between the callbacks here and those in the other lifecycle methods such as onResume()
.
As a general rule, however, a resumed activity will have window focus... unless it has displayed other dialogs or popups that take input focus, in which case the activity itself will not have focus when the other windows have it. Likewise, the system may display system-level windows (such as the status bar notification panel or a system alert) which will temporarily take window input focus without pausing the foreground activity.
hasFocus | Whether the window of this activity has focus. |
---|
Set the activity content from a layout resource. The resource will be inflated, adding all top-level views to the activity.
layoutResID | Resource ID to be inflated. |
---|
设置我们的activity的显示的view
Set the activity content to an explicit view. This view is placed directly into the activity's view hierarchy. It can itself be a complex view hierarchy. When calling this method, the layout parameters of the specified view are ignored. Both the width and the height of the view are set by default to MATCH_PARENT
. To use your own layout parameters, invoke setContentView(android.view.View, android.view.ViewGroup.LayoutParams)
instead.
view | The desired content to display. |
---|
Set the activity content to an explicit view. This view is placed directly into the activity's view hierarchy. It can itself be a complex view hierarchy.
view | The desired content to display. |
---|---|
params | Layout parameters for the view. |
Set the activity content to an explicit view. This view is placed directly into the activity's view hierarchy. It can itself be a complex view hierarchy.
view | The desired content to display. |
---|---|
params | Layout parameters for the view. |
可以通过布局文件 或者 view来设置我们的activity的显示的 界面。
Change the intent returned by getIntent()
. This holds a reference to the given intent; it does not copy it. Often used in conjunction with onNewIntent(Intent)
.
newIntent | The new Intent object to return from getIntent |
---|
设置我们的intent
Sets the progress for the progress bars in the title.
In order for the progress bar to be shown, the feature must be requested via requestWindowFeature(int)
.
progress | The progress for the progress bar. Valid ranges are from 0 to 10000 (both inclusive). If 10000 is given, the progress bar will be completely filled and will fade out. |
---|
Call this to set the result that your activity will return to its caller.
resultCode | The result code to propagate back to the originating activity, often RESULT_CANCELED or RESULT_OK |
---|
RESULT_CANCELED
RESULT_OK
RESULT_FIRST_USER
setResult(int, Intent)
Call this to set the result that your activity will return to its caller.
As of GINGERBREAD
, the Intent you supply here can have Intent.FLAG_GRANT_READ_URI_PERMISSION
and/or Intent.FLAG_GRANT_WRITE_URI_PERMISSION
set. This will grant the Activity receiving the result access to the specific URIs in the Intent. Access will remain until the Activity has finished (it will remain across the hosting process being killed and other temporary destruction) and will be added to any existing set of URI permissions it already holds.
resultCode | The result code to propagate back to the originating activity, often RESULT_CANCELED or RESULT_OK |
---|---|
data | The data to propagate back to the originating activity. |
Change the title associated with this activity. If this is a top-level activity, the title for its window will change. If it is an embedded activity, the parent can do whatever it wants with it.
Change the title associated with this activity. If this is a top-level activity, the title for its window will change. If it is an embedded activity, the parent can do whatever it wants with it.
Same as startActivity(Intent, Bundle)
with no options specified.
intent | The intent to start. |
---|
android.content.ActivityNotFoundException |
ERROR(#startActivity(Intent, Bundle)}/{@link #startActivity(Intent, Bundle)})
startActivityForResult(Intent, int)
Launch a new activity. You will not receive any information about when the activity exits. This implementation overrides the base version, providing information about the activity performing the launch. Because of this additional information, the FLAG_ACTIVITY_NEW_TASK
launch flag is not required; if not specified, the new activity will be added to the task of the caller.
This method throws ActivityNotFoundException
if there was no Activity found to run the given Intent.
intent | The intent to start. |
---|---|
options | Additional options for how the Activity should be started. See Context.startActivity(Intent, Bundle) for more details. |
android.content.ActivityNotFoundException |
Same as calling startActivityForResult(Intent, int, Bundle)
with no options.
intent | The intent to start. |
---|---|
requestCode | If >= 0, this code will be returned in onActivityResult() when the activity exits. |
android.content.ActivityNotFoundException |
startActivity(Intent)
Launch an activity for which you would like a result when it finished. When this activity exits, your onActivityResult() method will be called with the given requestCode. Using a negative requestCode is the same as calling startActivity(Intent)
(the activity is not launched as a sub-activity).
Note that this method should only be used with Intent protocols that are defined to return a result. In other protocols (such as ACTION_MAIN
or ACTION_VIEW
), you may not get the result when you expect. For example, if the activity you are launching uses the singleTask launch mode, it will not run in your task and thus you will immediately receive a cancel result.
As a special case, if you call startActivityForResult() with a requestCode >= 0 during the initial onCreate(Bundle savedInstanceState)/onResume() of your activity, then your window will not be displayed until a result is returned back from the started activity. This is to avoid visible flickering when redirecting to another activity.
This method throws ActivityNotFoundException
if there was no Activity found to run the given Intent.
intent | The intent to start. |
---|---|
requestCode | If >= 0, this code will be returned in onActivityResult() when the activity exits. |
options | Additional options for how the Activity should be started. See Context.startActivity(Intent, Bundle) for more details. |
android.content.ActivityNotFoundException |
startActivity(Intent)
Called when an activity you launched exits, giving you the requestCode you started it with, the resultCode it returned, and any additional data from it. The resultCode will be RESULT_CANCELED
if the activity explicitly returned that, didn't return any result, or crashed during its operation.
You will receive this call immediately before onResume() when your activity is re-starting.
requestCode | The integer request code originally supplied to startActivityForResult(), allowing you to identify who this result came from. |
---|---|
resultCode | The integer result code returned by the child activity through its setResult(). |
data | An Intent, which can return result data to the caller (various data can be attached to Intent "extras"). |
startActivityForResult(Intent, int)
createPendingResult(int, Intent, int)
setResult(int)