你可以用startActivity()启动一个activity,它有一个参数是intent,你需要在这个intent中指明要调用的activity。Intent中你可以明确地指定要启动的activity,或只指定activity的类型,此时系统会为你挑选一个合适的activity,这个activity可能位于其它程序中,也可能位于你自己的程序中。Intent中可以带一坨被新activity使用的数据(相当于参数传递)。 在你的程序内部,如果需要启动一个内部的activity,你需在intent中明确指定新activity的类名。例如: Intent intent = new Intent(this, SignInActivity.class); startActivity(intent); SignInActivity是要启动的activity类。 然而,你的程序可能想执行自身没有提供的功能,比如发出邮件,发送短信息等。此时,需要启动其它程序提供的activity。此时就体现出intent的真正价值来了:它可以很容易地启动其它程序提供的activity,你只需要在intent中指定你要执行的动作,然后调用 startActivity() ,系统就会跟据你的需要,为你选择一个合适的activity,并启动它。如果同时有多个activity可以执行这动作,那么用户可以选择哪个被使用。例如,你想让用户发送一个电子邮件,你可以创建以下的Intent:Intent intent = new Intent(Intent.ACTION_SEND);intent.putExtra(Intent.EXTRA_EMAIL, recipientArray);startActivity(intent); putExtra()是设置扩充数据的,.EXTRA_EMAIL表明第二个参数recipientArray里面放的是多个email地址。当发邮件的程序被启动并接收到这个intent时,它就把邮件地址们放到它的Acitivity界面的“to”控件中。当用户发送完毕返回时,你的activity就恢复运行(resume)。可以看到,启动另外一个程序是多么的容易。
启动一个acitvity并得到结果
有时,你可能想从你启动的activity获得其执行后返回的结果。此时你可以用方法startActivityForResult()来启动新acitivity(不再是startActivity了)。然后,你的程序还需要定义回调方法onActivityResult()。当新activity运行结束时,它把一个intent返回给你的程序,这个intent是在onActivityResult()中被接收。 例如:你想让用户打开通讯录,从中选择一个联系人,然后你取得用户所选的联系人,对之进行处理。以下是示例代码:private void pickContact() { //Create anintent to "pick" a contact, as defined by the content provider URI Intent intent =new Intent(Intent.ACTION_PICK, Contacts.CONTENT_URI); startActivityForResult(intent, PICK_CONTACT_REQUEST);} @Overrideprotected void onActivityResult(int requestCode, intresultCode, Intent data) { // If the requestwent well (OK) and the request was PICK_CONTACT_REQUEST if (resultCode== Activity.RESULT_OK && requestCode == PICK_CONTACT_REQUEST) { // Perform aquery to the contact"s content provider for the contact"s name Cursorcursor = getContentResolver().query(data.getData(),new String[]{Contacts.DISPLAY_NAME}, null, null, null); if(cursor.moveToFirst()) { // True if the cursor is not empty intcolumnIndex = cursor.getColumnIndex(Contacts.DISPLAY_NAME); String name =cursor.getString(columnIndex); // Dosomething with the selected contact"s name... } }} 此例子展示了在onActivityResult()中的基本逻辑流程。首选检查所启动的Activity是否正确运行,resultCode为Activity.RESULT_OK表示正常,其次,查看requestCode是否与当时请求的一致,即是否为PICK_CONTACT_REQUEST。都通过后,开始操作返回的数据,也就是data参数。 Data是这样处理的,用ContentResolver向内容提供者发出请求,这个请求会返回一个游标,通过这个游标读取数据,这很像数据库表的操作。要理解此处,请查阅Content Providers一节。