Intent实现参数的传递以及Activity详解

来源:互联网 发布:伊戈达拉数据百度 编辑:程序博客网 时间:2024/05/18 14:45

Activity 是用户唯一可以看得到的东西。几乎所有的activity都与用户进行交互,所以Activity主要负责的就是创建显示窗口,你可以在这些窗口里使用setContentView(View)来显示你自己的UI。


  • onCreate(Bundle) 这个方法是初始化 activity的地方. 最重要的是,你经常需要在这里使用setContentView(int) 来设置UI布局所使用的layout资源, 当你需要使用程序控制UI中的组件时可以使用 findViewById(int) 来获得对应的视图。
  • 当用户离开activity时你可以在onPause() 进行相应的操作. 更重要的是,用户做的任何改变都应该在该点上提交 (经常提交到 ContentProvider 这里保存数据)。

如果要使用 Context.startActivity()来启动activity, activity都必须在启动者应用包的AndroidManifest.xml文件中有对应的 <activity> 定义。


  • activity在屏幕的前景中(activity栈的顶端),它是active或者running状态。
  • activity失去了焦点但是仍然可见(这个activity顶上遮挡了一个透明的或者非全屏的activity),它的状态是paused。一个paused状态的activity完全是alive的(它维护自己所有的状态和成员信息,而且仍然在window manager的管理中),但当系统内存极度贫乏时也会将其killed。
  • activity由于其他的activity而完全变暗,它就进入了stopped状态。它仍然保持着所有的状态和成员的信息,可是,他对于用户来说不可见,当别的地方需要内存的时候它经常会被killed。
  • activity是paused或者stopped,系统需要将其清理出内存的时可以命令其finish或者简单kill其进程。当它重新在用户面前显示的时候,它必须完全重新启动并且将其关闭之前的状态全部恢复回来。
系统中的Activity可以通过一个activity栈来进行管理。当一个新的activity启动的时候,它首先会被放置在activity栈顶部并成为running状态的activity —— 之前的activity也在activity栈中,但总是被保存在它的下边,只有当这个新的activity退出以后之前的activity才能重新回到前景界面。





这里有三个比较关键的生命周期。

  • 从最初调用onCreate(Bundle)到最终调用onDestroy()称为完整生命周期。Activity会在onCreate()进行所有“全局”状态的设置,在onDestroy()中释放所有持有的资源。举个例子,如果它有一个从网络上下载数据的后台线程,那他可能就会在onCreate()中创建这个线程并在onDestroy()中停止这个线程。
  • 从activity调用onStart()开始,到调用对应的onStop()为止称为可见生命周期。在这段时间内用户可以在屏幕上看到这个activity,尽管并不一定是在前景也不一定可以和用户交互。在这两个方法之间你可以维护那些activity在用户显示时所需的资源。举个例子来说,你可以在onStart()中注册一个IntentReceiver来监控那些可以对你的UI产生影响的环境改变,当你的UI不继续在用户面前显示时你可以在onStop()中注销这个IntentReceiver。每当activity在用户面前显示或者隐藏时都会调用相应的方法,所以onStart()和onStop()方法在整个生命周期中可以多次被调用。
  • 从activity调用onResume()开始,到调用对应的onPause()为止称为前景生命周期,这段时间activity处于其他所有activity的前面,且与用户交互。一个activity可以经常在resumed和paused状态之间转换——例如手机进入休眠时、activity的结果返回时、新的intent到来时——所以这两个方法中的代码应该非常的简短。

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() or onRestart()

 

onStart()

当activity对用户即将可见的时候调用。

其后调用onRestart()或onResume()(框架是否进行选择性调用onResume()仅仅是猜测)

No

onRestart()or onResume()

onRestart()

当activity从停止状态重新启动时调用。其后调用onResume()。

No

onResume()

 

onResume()

当activity将要与用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经可以传递给它。

如果其他的activity在它的上方恢复显示,则将调用onFreeze()。

No

onFreeze()

onFreeze()

当你的activity被暂停而其他的activity恢复与用户交互的时候这个方法会被调用(在其他activity显示之前),你可以使用这个方法保存你当前的用户状态(一般来说是当前实例的用户状态)。暂停之后,为了回收资源供给前景activity,系统会在需要的时间停止(或者kill)你的应用。以后如果你的activity启动一个新的实例重新与用户进行交互,你保存在这里的状态都将通过onCreate()方法传递给新的实例。

其后总是调用onPause()方法。

No

onPause()

onPause()

当系统要启动一个其他的activity时调用(其他的activity显示之前),这个方法被用来提交那些持久数据的改变、停止动画、和其他占用CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快。

如果activity重新回到前景时将调用onResume(), 如果对用户彻底不可见则会调用onStop()。

Yes

onResume() or
onStop()

onStop()

当另外一个activity恢复并遮盖住此activity,导致其对用户不再可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。

当activity重新回到前景与用户交互时调用onRestart(),如果activity将退出则调用onDestory()。

Yes

onStart() or
onDestroy()

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);
需要添加权限<uses-permission id=”android.permission.CALL_PHONE” >

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:xxx@abc.com”);
Intent it = new Intent(Intent.ACTION_SENDTO, uri);
startActivity(it);

Intent it = new Intent(Intent.ACTION_SEND);
it.putExtra(Intent.EXTRA_EMAIL, “me@abc.com”);
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={“me@abc.com”};
String[] ccs={“you@abc.com”};
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<String>, Bundle, Serialzable序列化接口(javabean)
- 回传数据.
- 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 thestartActivityForResult(Intent, int)              

 The result will come back through youronActivityResult(int, int, Intent)

When an activity exits, it can callsetResult(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));             }         }     } }

voidaddContentView(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.


         public View getCurrentFocus ()

Added in API level 1

Calls getCurrentFocus() on the Window of this Activity to return the currently focused view.

Returns
  • View The current View with focus or null.
当前那个组件获得了焦点。



         public FragmentManager getFragmentManager ()

Added in API level 11

Return the FragmentManager for interacting with fragments associated with this activity. 


         public Intent getIntent ()

Added in API level 1

Return the intent that started this activity. 

获得启动这个activity的intent


         public LayoutInflater getLayoutInflater ()

Added in API level 1

Convenience for calling getLayoutInflater()

获得填充器    实现将一个xml文件转化为一个view视图


         public SharedPreferences getPreferences (int mode)

Added in API level 1

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.

Parameters
modeOperating mode. Use MODE_PRIVATE for the default operation,MODE_WORLD_READABLE andMODE_WORLD_WRITEABLE to control permissions.
Returns
  • Returns the single SharedPreferences instance that can be used to retrieve and modify the preference values. 

         public Object getSystemService (String name)

Added in API level 1

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")
The top-level window manager in which you can place custom windows. The returned object is aWindowManager.   这个就是获得窗体管理器


LAYOUT_INFLATER_SERVICE ("layout_inflater")
A LayoutInflater for inflating layout resources in this context.   也可以获得填充器


ACTIVITY_SERVICE ("activity")
A ActivityManager for interacting with the global activity state of the system.   


VIBRATOR_SERVICE ("vibrator")
A Vibrator for interacting with the vibrator hardware.   


INPUT_METHOD_SERVICE ("input_method")
An InputMethodManager for management of input methods.  


         public boolean onKeyDown (int keyCode, KeyEvent event)

Added in API level 1

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.   


Parameters
keyCodeThe value in event.getKeyCode().eventDescription of the key event.

Returns
  • Return true to prevent this event from being propagated further, orfalse to indicate that you have not handled this event and it should continue to be propagated.
总结  这个地方就是  我们获得keyCode就是按下的是那个键,  同时返回值  返回true的时候  就表明我们已经将这个事件处理了     否则这个事件就是没有被处理。




         public boolean onKeyLongPress (int keyCode, KeyEvent event)

Added in API level 5

Default implementation of KeyEvent.Callback.onKeyLongPress(): always returns false (doesn't handle the event).

Parameters
keyCodeThe value in event.getKeyCode().eventDescription of the key event.
Returns
  • If you handled the event, return true. If you want to allow the event to be handled by the next receiver, return false. 


长按事件的处理。


         public boolean onKeyUp (int keyCode, KeyEvent event)

Added in API level 1

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.

Parameters
keyCodeThe value in event.getKeyCode().eventDescription of the key event.
Returns
  • Return true to prevent this event from being propagated further, orfalse to indicate that you have not handled this event and it should continue to be propagated.
See Also
  • onKeyDown(int, KeyEvent)
  • KeyEvent

点击键  按起的时候触发的事件



         public boolean onTouchEvent (MotionEvent event)

Added in API level 1

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.

Parameters
eventThe touch screen event being processed.
Returns
  • Return true if you have consumed the event, false if you haven't. The default implementation always returns false. 
这个方法被调用的条件是    首选我们需要做出触摸事件   同时这个view下面的各个组件都没有处理这个事件

随后  我们就会执行这个方法。



         public void onWindowFocusChanged(boolean hasFocus)

Added in API level 1

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 asonResume().

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.

Parameters
hasFocusWhether the window of this activity has focus.



         public void setContentView(int layoutResID)

Added in API level 1

Set the activity content from a layout resource. The resource will be inflated, adding all top-level views to the activity.

Parameters
layoutResIDResource ID to be inflated.

设置我们的activity的显示的view



         public void setContentView(View view)

Added in API level 1

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.

Parameters
viewThe desired content to display.


         public void setContentView(View view,ViewGroup.LayoutParams params)

Added in API level 1

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.

Parameters
viewThe desired content to display.paramsLayout parameters for the view.


         public void setContentView(View view,ViewGroup.LayoutParams params)

Added in API level 1

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.

Parameters
viewThe desired content to display.paramsLayout parameters for the view.


可以通过布局文件  或者 view来设置我们的activity的显示的  界面。


         public void setIntent(Intent newIntent)

Added in API level 1

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).

Parameters
newIntentThe new Intent object to return from getIntent

设置我们的intent


         public final void setProgress (int progress)

Added in API level 1

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).

Parameters
progressThe 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.


         public final void setResult (int resultCode)

Added in API level 1

Call this to set the result that your activity will return to its caller.

Parameters
resultCodeThe result code to propagate back to the originating activity, often RESULT_CANCELED or RESULT_OK
See Also
  • RESULT_CANCELED
  • RESULT_OK
  • RESULT_FIRST_USER
  • setResult(int, Intent)


         public final void setResult (int resultCode, Intent data)

Added in API level 1

Call this to set the result that your activity will return to its caller.

As of GINGERBREAD, the Intent you supply here can haveIntent.FLAG_GRANT_READ_URI_PERMISSION and/orIntent.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.

Parameters
resultCodeThe result code to propagate back to the originating activity, often RESULT_CANCELED or RESULT_OKdataThe data to propagate back to the originating activity.


         public void setTitle(int titleId)

Added in API level 1

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.

public void setTitle(CharSequence title)

Added in API level 1

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.

public void setTitleColor(int textColor)

Added in API level 1

public void setVisible(boolean visible)


         public void startActivity(Intent intent)

Added in API level 1

Same as startActivity(Intent, Bundle) with no options specified.

Parameters
intentThe intent to start.
Throws
 android.content.ActivityNotFoundException
See Also
  • ERROR(#startActivity(Intent, Bundle)}/{@link #startActivity(Intent, Bundle)})
  • startActivityForResult(Intent, int)

public void startActivity(Intent intent,Bundle options)

Added in API level 16

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, theFLAG_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.

Parameters
intentThe intent to start.optionsAdditional options for how the Activity should be started. See Context.startActivity(Intent, Bundle) for more details.
Throws
 android.content.ActivityNotFoundException



         public void startActivityForResult(Intent intent, int requestCode)

Added in API level 1

Same as calling startActivityForResult(Intent, int, Bundle) with no options.

Parameters
intentThe intent to start.requestCodeIf >= 0, this code will be returned in onActivityResult() when the activity exits.
Throws
 android.content.ActivityNotFoundException
See Also
  • startActivity(Intent)

public void startActivityForResult(Intent intent, int requestCode,Bundle options)

Added in API level 16

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 callingstartActivity(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 asACTION_MAIN orACTION_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.

Parameters
intentThe intent to start.requestCodeIf >= 0, this code will be returned in onActivityResult() when the activity exits.optionsAdditional options for how the Activity should be started. See Context.startActivity(Intent, Bundle) for more details.
Throws
 android.content.ActivityNotFoundException
See Also
  • startActivity(Intent)


         protected void onActivityResult (int requestCode, int resultCode,Intent data)

Added in API level 1

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. TheresultCode 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.

Parameters
requestCodeThe integer request code originally supplied to startActivityForResult(), allowing you to identify who this result came from.resultCodeThe integer result code returned by the child activity through its setResult().dataAn Intent, which can return result data to the caller (various data can be attached to Intent "extras").
See Also
  • startActivityForResult(Intent, int)
  • createPendingResult(int, Intent, int)
  • setResult(int)























































0 0
原创粉丝点击