分类:C#、Android、VS2015;

创建日期:2016-02-23

一、简介

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://www.google.com");

StartActivity(intent);

3、关闭Activity

调用Finish()可终止activity。也可以调用FinishActivity() 来终止你之前启动了的一个独立的activity。

记住:显式关闭Activity仅用于你绝对不想让用户再返回这个activity的实例的情况。多数情况下,都不应该显式调用Finish()或者FinishActivity()来关闭acitivity,而是应该让系统为你去管理它。

二、示例—ch1201IntentDemo

该例子演示如何通过Intent拨打电话,以及如何启动另一个Activity。

本例子需要应用程序具有“CALL_PHONE”权限。

1、运行截图

运行前先在模拟器中添加一些联系人及其电话号码(模拟器本身有这个功能,直接在模拟器中操作即可),然后再测试要拨出的号码。

下面左图是该例子的主界面,右图是单击【打电话】按钮后,在第2个界面中拨出的电话号码截图。

 

下图是单击【转到活动1】按钮后的运行截图。

2、主要设计步骤

(1)添加“CALL_PHONE”权限

在【解决方案资源管理器】中,鼠标双击项目的【Properties】进入下面的界面,然后勾选“CALL_PHONE”选项:

设置后,系统就会自动在AndroidManifest.xml中添加下面的代码:

<uses-permission android:name="android.permission.CALL_PHONE" />

(2)添加ch1201_Main.axml

在Resources\layout文件夹下添加该文件,模板选择【Layout】:

<?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">
<Button
android:id="@+id/btn1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="打电话" />
<Button
android:id="@+id/btn2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="转到活动1" />
</LinearLayout>

(3)添加ch1201_Layout1.axml

在Resources\layout文件夹下添加该文件,模板选择【Layout】:

<?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: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);
}
}
}

运行。

【Android】12.2 利用Intent启动和关闭Activity的更多相关文章

  1. Activity详解一 配置、启动和关闭activity转载 https://www.cnblogs.com/androidWuYou/p/5887726.html

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  2. Activity详解一 配置、启动和关闭activity

    先看效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个And ...

  3. Android应用开发学习之启动另外一个Activity

    作者:刘昊昱 博客:http://blog.csdn.net/liuhaoyutz 一个Activity可以启动另外一个Activity,以实现比较复杂的功能,我们来看一个例子,其运行效果如下图所示: ...

  4. 【Android基础】利用Intent在Activity之间传递数据

    前言: 上一篇文章给大家聊了Intent的用法,如何用Intent启动Activity和隐式Intent,这一篇文章给大家聊聊如何利用Intent在Activity之间进行沟通.   从一个Activ ...

  5. Android开发之通过Intent启动系统应用的协议

    使用隐式Intent启动系统应用,除了http协议,还有geo(显示地理位置),tel(拨打电话),file(文件)等

  6. 建立、配置和使用Activity——启动、关闭Activity

    一个Android应用通常都会包含多个Activity,但只有一个Activity会作为程序的入口——当该Android应用运行时将会自启动并执行该Activity.至于应用中的其他Activity, ...

  7. 【Android Developers Training】 4. 启动另一个Activity

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. 【Android】12.5 利用Intent读取和更新通讯录

    分类:C#.Android.VS2015: 创建日期:2016-02-23 修改日期:2016-03-08更正了未关闭cursor的bug.  一.简介 本节演示如何在安卓系统中通过用户配置文件(us ...

  9. Android笔记(五)利用Intent启动活动

    Intent是意图的意思,分为显式 Intent 和隐式 Intent. 以下我们试图在FirstActivity中通过点击button来启动SecondActivity 1.显式Intent 在应用 ...

随机推荐

  1. 持续集成之路 —— Mock对象引起的测试失败

    今天遇到了一个很奇怪的问题,纠结了好久.在和同事念叨这个问题时,突然想到了问题所在. 问题现象: 在一个Service的单元测试类中有八个测试用例,单独运行时都可以正常通过.可是一旦一起运行时,总是会 ...

  2. Linux rpm安装MySQL

    1:查看操作系统信息 ##uname -a : 准备软件包: MySQL-server-5.6.19-1.rhel5.x86_64.rpm MySQL-devel-5.6.19-1.rhel5.x86 ...

  3. 位图算法 C语言

    #include <stdio.h> void set_bit(void *base, unsigned long n) { unsigned long *m = (unsigned lo ...

  4. sqlserver varchar转datate 加计算

    SELECT * from mconsumeinfo mo where CONVERT(Datetime, mo.financedate, 120)> dateadd(day,-180,getd ...

  5. linux sar命令详细说明相关参数

    详细说明linux的sar命令 sar(System Activity Reporter系统活动情况报告)是目前 Linux 上最为全面的系统性能分析工具之一,可以从多方面对系统的活动进行报告,包括: ...

  6. AIX查看系统安装时间和运行时长

    $ lslpp -h bos.mp* --AIX系统的安装时间,可以通过bos.mp和bos.mp64文件集的安装时间得知 Fileset Level Action Status Date Time ...

  7. Intellij IDEA 快捷键整理(dyCopy)

    原文:http://www.cnblogs.com/tonycody/p/3257601.html   [常规] Ctrl+Shift + Enter,语句完成 “!”,否定完成,输入表达式时按 “! ...

  8. cxf之Caused by: java.lang.RuntimeException: Soap 1.1 endpoint already registered on address /rest

    发布rest服务 但是spring-cxf-rest.xml中配置的却是 <jaxws:server address="/weather".................. ...

  9. IE浏览器SCRIPT5拒绝访问,谷歌浏览器XMLHttpRequest can't load file:/......

    一.背景 在测试ajax时,写了一个ajax.html,目的是访问example.txt中的文本,写好后,右键该html选择在浏览器中打开,浏览器页面上无内容.调出调试窗口: IE浏览器:SCRIPT ...

  10. HTML:减少页面加载时间的方法

    1. 重复的HTTP请求数量应尽量减少 (1)减少调用其他页面.文件的数量. (2)在使用css格式时,常会采用background载入图形文件,而每个background的图像都会产生1次HTTP ...