Android利用Intent启动和关闭Activity

时间:2021-05-20

一、简介

Android应用程序中一般都有多个Activity,在Activity中,通过调用StartActivity方法,并在该方法的参数中传递Intent对象,就可以实现不同Activity之间的切换和数据传递。

通过StartActivity方法传递intent对象来启动另一个Activity时,可分为两类:

l 显式启动:在创建的Intent对象中明确指定启动的是哪个Activity;

l 隐式启动:安卓系统根据Intent的动作和数据决定应该启动哪个Activity。

1、显式启动Activity

通过Intent显式启动一个Activity时,必须先创建一个Intent对象,并在该对象的构造函数中指明要启动的目标组件名。例如:

var intent = new Intent(this, typeof(Activity1));StartActivity(intent);

在这种情况下,除了intent对象以外,没有其他方式可以匹配组件名。

2、隐式启动Activity

隐式启动Activity是指Android系统根据过滤规则自动去匹配对应的Intent,即不需要在Intent对象中明确指明启动的是哪个Activity,而是让Android系统来决定应该启动谁。在这种情况下,Android系统会自动匹配最适合处理intent的一个或多个Activity。匹配的Activity可能是应用程序自身的,也可能是Android系统内置的,还可能是第3方应用程序提供的。因此,隐式启动这种方式更强调了Android应用程序中组件的复用性。

注意,如果希望让你的程序通过Activity展示某些动作,例如打电话、发邮件、发短信,或者使用activity中的数据等。这时候,首先考虑调用系统提供的功能去实现(即:隐式启动Activity的方式)。在这种情况下,只需要通过Intent指定相应的动作即可,这是intent真正体现其价值的地方。例如:

var call = new Intent(Intent.ActionCall); //初始化一个电话呼叫call.SetData(Android.Net.Uri.Parse("tel:13811112222"));StartActivity(call);

下面是常用的一些动作常量:

注意:用C#表示这些动作常量时,键入“Intent.”然后选择一个常量即可。这些可选择的常量去掉了分隔单词的下划线,并将每个单词的首字母改为大写,其他字母改为小写,例如:Intent.ActionCall。

除了指定相应的动作以外,还可以同时指定Uri,这种情况下,Android会调用内置的浏览器来隐式启动一个Activity。例如:

Intent intent=new Intent(Intent.ActionView, Uri.Parse("http:///apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <TextView android:text="这是活动1的界面\n\n提示:按【Back】按钮返回" android:textAppearance="?android:attr/textAppearanceLarge" android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/textView1" android:layout_gravity="center" android:layout_margin="30dp" /></LinearLayout>

(4)添加ch1201IntentDemoMain.cs

在SrcDemos文件夹下添加该文件,模板选择【Activity】:

using Android.App;using Android.Content;using Android.OS;using Android.Widget;namespace MyDemos.SrcDemos{ [Activity(Label = "【例12-1】Intent基本用法1")] public class ch1201IntentDemoMain : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch1201_Main); //启动电话拨号的Activity FindViewById<Button>(Resource.Id.btn1).Click += delegate { var call = new Intent(Intent.ActionCall); call.SetData(Android.Net.Uri.Parse("tel:13811112222")); StartActivity(call); }; //启动自定义的Activity FindViewById<Button>(Resource.Id.btn2).Click += delegate { var intent = new Intent(this, typeof(ch1201IntentDemoActivity1)); StartActivity(intent); }; } }}

(5)添加ch1201IntentDemoActivity1.cs

在SrcDemos文件夹下添加该文件,模板选择【Activity】:

using Android.App;using Android.OS;namespace MyDemos.SrcDemos{ [Activity(Label = "【例12-1】Intent基本用法1")] public class ch1201IntentDemoActivity1 : Activity { protected override void OnCreate(Bundle savedInstanceState) { base.OnCreate(savedInstanceState); SetContentView(Resource.Layout.ch1201_Layout1); } }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。

相关文章