Android开发21——隐式意图

所谓隐式意图就是在意图激活Activity、Service或BroadcastReceiver这三类组件时,并不显示指出需要显示指出主键的名字,而是通过指定action,data,category,Android系统会根据这三个特征找到最合适的组件并激活。先看自定义的例子

<application android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <activity android:name=".OtherActivity1" android:label="@string/app_name">
            <intent-filter>
                <action android:name="cn.xy.action" />
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>
        <activity android:name=".OtherActivity2" android:label="@string/app_name">
            <intent-filter>
                <action android:name="cn.xy.action2" />
                <action android:name="cn.xy2.action2" />
                <category android:name="cn.xy.category2"></category>
                <category android:name="cn.xy2.category2"></category>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>
        <activity android:name=".OtherActivity3" android:label="@string/app_name">
            <intent-filter>
                <action android:name="cn.xy.action3" />
                <category android:name="cn.xy.category3"></category>
                <data android:scheme="xy" android:host="www.xy.cn" android:path="/xy"></data>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>
         <activity android:name=".OtherActivity4" android:label="@string/app_name">
            <intent-filter>
                <action android:name="cn.xy.action4" />
                <category android:name="cn.xy.category4"></category>
                <data android:scheme="xy" android:host="www.xy.cn"></data>
                <data android:mimeType="image/*"/>
                <category android:name="android.intent.category.DEFAULT"></category>
            </intent-filter>
        </activity>
    </application>

 

/**
 * 隐式意图激活Activity
 *
 * @author 徐越
 *
 */
public class MainActivity extends Activity
{
	@Override
	public void onCreate(Bundle savedInstanceState)
	{
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
	}

	public void goActivity1(View v)
	{
		Intent intent = new Intent();
		intent.setAction("cn.xy.action");
		// 方法内部默认为intent注册了android.intent.category.DEFAULT类别,所以在AndroidManifest.xml中要写上该类别
		this.startActivity(intent);
	}

	public void goActivity2(View v)
	{
		// 在只配置action和category时只要intent的action和category出现在intent-filter中就可以匹配
		Intent intent = new Intent();
		intent.setAction("cn.xy.action2");
		intent.addCategory("cn.xy.category2");
		this.startActivity(intent);
	}

	public void goActivity3(View v)
	{
		Intent intent = new Intent();
		intent.setAction("cn.xy.action3");
		intent.addCategory("cn.xy.category3");
		// 数据以uri形式传递
		intent.setData(Uri.parse("xy://www.xy.cn/xy"));
		this.startActivity(intent);
	}

	public void goActivity4(View v)
	{
		Intent intent = new Intent();
		intent.setAction("cn.xy.action4");
		intent.addCategory("cn.xy.category4");
		// 不能分别写setData和setType,因为setType会将setData设置的值清除掉
		intent.setDataAndType(Uri.parse("xy://www.xy.cn/xxx"), "image/gif");
		this.startActivity(intent);
	}
}

看一个系统intent的例子,我们在应用中比如要实现拨打电话功能

		// v为当前被点击的按钮对象
		public void onClick(View v)
		{
			// 获取电话号码
			String phone = txtPhone.getText().toString();

			// 调用系统自带拨号器设置拨号意图对象
			Intent intent = new Intent();
			intent.setAction("android.intent.action.CALL");
			intent.setData(Uri.parse("tel:" + phone));

			// 激活意图,方法内部会自动为Intent添加类别android.intent.category.DEFAULT
			startActivity(intent);
		}
时间: 2024-10-31 23:48:49

Android开发21——隐式意图的相关文章

Android学习之Intent中显示意图和隐式意图的用法实例分析_Android

本文实例讲述了Android学习之Intent中显示意图和隐式意图的用法.分享给大家供大家参考,具体如下: Intent(意图)主要是解决Android应用的各项组件之间的通讯. Intent负责对应用中一次操作的动作.动作涉及数据.附加数据进行描述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用. 因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦. 例如,在一个联系人

android隐式意图激活浏览器的实现方法

在有些时候,我们可能想打开某个不确定的应用,比如,我们想要通过浏览器打开百度的站点,但是我们并不强调必须要使用哪一个浏览器,那么这种情况我们使用显示意图可能不太好,更好的做法是使用隐式意图打开网站. 效果: 点击按钮后: 附代码: package com.yy.activity; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle;

android隐式意图激活自定义界面和系统应用界面的实例

我们也可以使用隐士意图激活自定义的界面,并且可以携带数据: 效果: 点击第二个按钮后: 点击最后一个按钮(激活系统短消息界面)后: 附代码: 主窗体的代码: package com.yy.twoactivity; import android.app.Activity; import android.content.Intent; import android.net.Uri; import android.os.Bundle; import android.view.View; public

隐式意图匹配规则

Android基本的设计理念是鼓励减少组件间的耦合,因此Android提供了Intent,Intent提供了一种通用的消息系统,它允许在你的应用程序与其它的应用程序间传递Intent来执行动作和产生事件.使用Intent可以激活Android应用的三个核心组件:活动.服务和广播接收器.即Android的四大组件中活动.服务和广播接收器.内容提供者中只有内容提供者不是被Intent激活的. Intent可以划分成显式意图和隐式意图. 显示意图适合用于应用的内部,速度较快. 隐式意图有对应的查找规则

Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码_Android

Android Studio Intent隐式启动,发短信,拨号,打电话,访问网页等实例代码 功能 创建5个按钮,隐式启动.发短信.拨号按钮.电话按钮.打开网页按钮.通过使用Intent来完成各自按钮下的功能 代码目录如下 详细代码如下: activity_main.xml代码如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://sc

Windows 7 部署 Android 开发环境傻瓜式教程(Eclipse+ADT)

我把该教程做成了一个PDF,网速慢的朋友可以在这里下载 http://files.cnblogs.com/vengen/AndroidSetup.zip 准备文件: WIN7 的安装方法与 XP 的安装方式完全相同.   1.安装JDK 运行 jdk-6u14-windows-i586.exe     检查JDK是否安装成功.打开cmd窗口,输入 java –version 查看JDK的版本信息. 2.安装 Eclipse 直接解压缩 Eclipse3.4.1.zip 到指定目录 如:F:\An

Android开发入门(二)使用意图 2.5 使用Intent调用内置应用程序

我们已经了解了如何在自己的单个应用中调用activity.但是,android开发中比较重要的一点,就是使 用intent调用其他应用的activity.特别地,你的应用可以调用系统中的许多"内置"应用.所谓的"内置 "应用,指的就是系同级别的应用,比如Browser,Phone,Sms等等.举个例子,如果你的应用需要打开一个 网页,可以使用Intent对象去调用浏览器,浏览器把网页显示出来,而不是要自己创建一个浏览器... 下面的例子展示如何调用系统中的几个比较常

Android开发入门(二)使用意图 2.2 解决Intent-Filter的冲突

我们已经知道<intent-filter>用来定义你的Activity如何被另外的Activity开启,这就是所谓的 "过滤器".但是,如果有两个Activity有相同的<intent-filter>,那将发生什么呢? AndroidManifest.xml中的代码. <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="

Android开发入门(二)使用意图 2.1 链接Activities

在一个Android应用中可以包含零个或多个Acivity.当你的应用中包含多个Activity时,通常要在各个 Activity中间跳转.在Android中,完成这些操作需要使用Intent的组件. 理解这个既重要又抽象概 念的最好办法,就是尝试一下.下面的例子展示如何在两个Activity之间跳转. 1. 创建一个工程, UsingIntent. 2. 创建两个Activity:UsingIntentActivity和SecondActivitty. 3. AndroidManifest.x