Android利用Intent启动和关闭Activity

一、简介

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

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

(0)

相关推荐

  • Android 侧滑关闭Activity的实例

    Android 侧滑关闭Activity的实例 实现原因 其实侧滑关闭activity在网上也有大量的文章去介绍他,我也有去看,要么是代码实在太多看不下去,要么就是跑了项目没有反应的.唯一的方法还是自己随手鲁一个~,侧滑这个东西在Android中是比较少见的,iOS是最常见不过了,因为毕竟他们没有物理返回键.还有UIScrollView那些.然而我们用的最多的QQ也只是有个功能,并没有真正的滑动效果.至于微信的,我记得N久以前滑出了一个bug.也没什么印象了.估计也是极小的概率事件.于是,当初我

  • Android仿微信activity滑动关闭效果

    Android仿微信activity滑动关闭功能 1.利用具体利用v4包下的slidingPaneLayout实现透明的activity,代码如下: BaseActivity: public class BaseSlideCloseActivity extends AppCompatActivity implements SlidingPaneLayout.PanelSlideListener { @Override protected void onCreate(Bundle savedIns

  • Android 关闭多个Activity的实现方法

    Android 关闭多个Activity的实现方法 总的来说有四种方法: 1.使用Application来进行关闭 public class App extends Application { private static List<Activity> lists = new ArrayList<>(); public static void addActivity(Activity activity) { lists.add(activity); } public static

  • Android中Activity滑动关闭的效果

    最近感觉有一个Activity关闭的效果挺不错的,就是手势滑动就可以关闭当前Activity,于是就想写一篇博客和大家一起分享下!废话不多说,老规矩,还先上效果图,更直观! 项目地址:https://github.com/xinyitiandi/SlidingFinishDemo 上代码: 1.第一个Activity: package com.ekeguan.slidingfinishdemo; import android.content.Intent; import android.os.B

  • Android实现退出时关闭所有Activity的方法

    本文示例实现了Android退出时关闭所有Activity的功能,分享给大家供大家参考之用.具体方法如下: 一般来说,在Android退出时,有的Activity可能没有被关闭.为了在Android退出时关闭所有的Activity,这里给出了以下的类: //关闭Activity的类 public class CloseActivityClass{ public static List<Activity> activityList = new ArrayList<Activity>(

  • Android利用Intent启动和关闭Activity

    一.简介 Android应用程序中一般都有多个Activity,在Activity中,通过调用StartActivity方法,并在该方法的参数中传递Intent对象,就可以实现不同Activity之间的切换和数据传递. 通过StartActivity方法传递intent对象来启动另一个Activity时,可分为两类: l 显式启动:在创建的Intent对象中明确指定启动的是哪个Activity: l 隐式启动:安卓系统根据Intent的动作和数据决定应该启动哪个Activity. 1.显式启动A

  • Activity配置、启动和关闭activity实例详解

    大家先看下效果图: Android为我们提供了四种应组件,分别为Activity.Service.Broadcast receivers和Content providers,这些组建也就是我们开发一个Android应用程序的基石.系统可以通过不同组建提供的切入点进入到开发的应用程序中.对用户来说不是所有的组建都是实际的切入点,但是他们之间都是相互依赖的,它们每一个作为存在的实体,扮演着特定的角色,作为独一无二的基石帮助开发者定义Android应用的行为.下面我将整理自己的Activity学习点滴

  • Android使用Intent启动其他非系统应用程序的方法

    本文实例讲述了Android使用Intent启动其他非系统应用程序的方法.分享给大家供大家参考,具体如下: android应用程序内部通过Intent来实现Activity间的跳转.也知道通过Intent调用系统程序.但若想在应用程序A内开启应用程序B(前提是A.B均已安装),该如何去实现? 记录下实现过程. 在应用程序A内添加如下代码: Intent i = new Intent(); i.setClassName("com.example.a", "com.example

  • Android利用Intent.ACTION_SEND进行分享

    安卓系统本身可以很简便的实现分享功能,因为我们只需向startActivity传递一个ACTION_SEND的Intent,系统就为我们弹出一个应用程序列表.其实在系统的文件管理器中,这应该是我们常用的功能(包括文件的打开Intent.ACTION_VIEW). 下面列出一个简单的分享方式 Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); sendIntent.putExtra(Intent

  • 详解Android中Intent传递对象给Activity的方法

    Activity回顾 activity是android程序中最重要的组件之一,它是用户与android用户交互的主要组件,类似于桌面程序的图形界面.android程序大致可以分为看的见的组件和看不见的service.看得见的组件主要就是在Activity中定义,看不见的service,包括service,BroadCastReceiver,ContentProvider等等,这是后话.今天先来大致了解一下activity. 可以理解activity为盛放组件的容器,和用户交互的组件都要放在Act

  • Android利用Intent实现记事本功能(NotePad)

    本文实例为大家分享了Intent如何实现一个简单的记事本功能的演示过程,供大家参考,具体内容如下 1.运行截图 单击右上角[-]会弹出[添加]菜单项,长按某条记录会弹出快捷菜单[删除]项. 2.主要设计步骤 (1)添加引用 鼠标右击[引用]à[添加引用],在弹出的窗口中勾选"System.Data"和"System.Data.SQlite",如下图所示: 注意:不需要通过NuGet添加SQLite程序包,只需要按这种方式添加即可. (2)添加图片 到Android

  • Android利用Intent读取和更新通讯录

    一.简介 本节演示如何在安卓系统中通过用户配置文件(user profile)读取和更新该手机的所有联系人信息,以及如何导航到用户配置文件中的这些联系人. 二.基本概念  1.什么是 User Profile 用户配置文件(user profile)保存的是机主信息以及该手机中所有联系人的信息. 假定手机所有者的名字为"Mao mao yu",那么,user profile保存的就是"Mao mao yu"的通讯录(即机主所有联系人的姓名.电话.邮箱.--等信息).

  • Android利用Intent实现读取图片操作

    本文实例演示如何从图库(Gallery)中读取图像并用ImageView将它显示出来,供大家参考,具体内容如下 运行本示例前,需要先利用相机模拟拍摄一些图片到图库中. 1.运行截图 2.主要设计步骤 (1)添加ch1203_ReadGallery.axml <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.c

  • Android开发之利用Intent实现数据传递的方法

    本文实例讲述了Android利用Intent实现数据传递的方法.分享给大家供大家参考,具体如下: 在Android开发过程中,很多人都熟悉Intent,这是个用于在多个View之间共享数据的类.本节主要讲述通过点选ListView中的文本,把文本中的URL加载到一个新的页面上,并且打印出来.为了方便,我先把前面一篇<Android开发之利用jsoup解析HTML页面的方法>的代码重新贴一下,因为在上一节后,代码做了少许修改: try { doc = Jsoup.parse(new URL(&q

  • 详解Android中Intent的使用方法

    一.Intent的用途 Intent主要有以下几种重要用途: 1. 启动Activity:可以将Intent对象传递给startActivity()方法或startActivityForResult()方法以启动一个Activity,该Intent对象包含了要启动的Activity的信息及其他必要的数据. 2. 启动Service:可以将Intent对象传递给startService()方法或bindService()方法以启动一个Service,该Intent对象包含了要启动的Service的

随机推荐