Android基础__Intent入门

简介

何为 Intent?

Intent 被翻译为中文就是“意图,目的”的意思。意图(目的)那好理解啊,我们做事情不都是带着一定的 Intent 才去做的吗?那么在 Android 中的 Intent 中是否跟我们在现实世界中的相同呢?其实在 Android 中它只是一个消息传递对象,说的实在点它就是个跑腿送信的家伙。那么它又是在替那些 dalao 而工作呢?如果你觉得很好奇,那么骚年请跟着我的节奏(一起摇摆)继续往下看。

基本概念

基本用例

接下来,我们就来看看那些年 Intent 为之服务的大佬们都是些谁?其实我说出来,你可能就觉得一点都不陌生了。
它们分别是 Activity、服务、广播

  • 启动 Activity:
    当我们需要从 Activity A 跳转至我们的 Activity B 时,通过将 Intent 对象传递给 startActivity(),就可以启动目标Activity了。我相信骚年你也发现了既然 Intent 工作主要是跑腿和送信,那么现在跑腿的任务完成了那么送信呢?别急!这在下面的用法时我会向你介绍。

Intent 启动 Activity 过程图

  • 启动服务:
    有时候你可能需要一些在后台进行的操作(比如,下载文件),这时你就可以通过将 Intent 对象传递给 startService() 启动你想要的服务来完成这些操作。

  • 传递广播:
    首先 Android 中的广播是一个所有应用程序都可以接受的消息。Android 系统将根据系统发生的各种事件(比如开关机、电量变化以及网络变化等),传递各种广播。通过将 Intent 传递给 sendBroadcast() 来发送你自定义的广播。

两种类型

Intent 这个跑腿送信的工作还分为两个工种呢。骚年你可能会问我,为什么 Intent 还要分类呢?预知答案如何,且看下面解答。

  • 显式 Intent:
    显式 Intent 之所以叫“显式”,就是因为它太实在“意图”了,骚年你没觉得吗?你要启动的 Activity 的都在它的构造方式中声明了,你说说这是不是很“意图”?那它这样就会不会导致什么问题呢?我的回答是Yes,比如说用户想要打开相机时,我们并不知道用户想要调用的原生相机应用,还是其他的美颜相机类应用。

  • 隐式 Intent:
    之所以叫做“隐式” Intent,其实是因为我们不需要去关心用户他调用那个应用来完成操作。而且就算我们指定了一个应用,但是用户并没有安装怎么办?所以这时候使用隐式 Intent 更为安全,也更为合理。

Intent 过滤器

那 Intent 过滤器是什么呢?它是 AndroidManifest.xml 文件中的一个表达式,它指定了这个组件能接收的 Intent 类型。看不懂(一脸懵)?没事儿,我学的时候也没看懂(微笑脸)。这么跟你举例说明吧,比如说在我们的应用中有个具有分享功能的 Activity ,它不仅能分享文本还能分享音视频。我们就可以为它添加一个 Intent 过滤器,使它能够响应分享文本或者视频的 Intent 类型。这样一来,我们就不用关心用户到底是要分享文本还是音视频了。

通用 Intent

上面我们说了隐式 Intent 并不指定要启动的具体应用,它仅仅是指定一项操作并提供执行该操作所需的数据。然后 Google 老大就帮我们开发者们提供了一些常用的应用组件的 Intent 启动方式以及 Intent 过滤器的写法。这在下面的参考资料中我会贴上链接。

基本用法

创建 Intent

显式 Intent

显示 Intent 的创建过程比较简单,因为我们都知道要启动的 Activity、服务、广播。这里我只是简单的介绍,就只用 Activity 来举例,下面隐式 Intent 和Intent 过滤器的创建也是一样,所以我就不再赘述了。

Intent intent = new Intent(MainActivity.this,TargetActivity.class);
intent.setData(Uri.parse("https://developers.google.com/?hl=zh-cn"));
startActivity(intent);

这里我启动了一个叫 TargetActivity 的 Activity,并且向它传递了 Google 开发者中文官网的网址。

隐式 Intent
Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.putExtra(Intent.EXTRA_TEXT, textMessage);
intent.setType("text/plain");
// 检查设备是否可以处理此请求
if (sendIntent.resolveActivity(getPackageManager()) != null) {
    startActivity(sendIntent);
}

这里我通过将 action 指定为 ACTION_SEND 表示启动能发送信息的应用,并且通过 putExtra() 来传递数据。

创建 Intent 过滤器

<activity android:name=".TargetActivity">
    <intent-filter>
        <action android:name="com.z4knight.intenttest.ACTION_START"/>
        <category android:name="android.intent.category.DEFAULT"/>
    </intent-filter>
</activity>

在这里需要注意下,只有 <action> 和 <category> 的内容都能匹配的 Intent 才能响应。不过这里 <category> 是默认的一种写法,这样在 Intent 调用 startActivity() 方法的时候会自动将这个 category 添加到 Intent 中。

Intent intent = new Intent("com.z4knight.intenttest.ACTION_START");
intent.setData(Uri.parse("https://developers.google.com/?hl=zh-cn"));
startActivity(intent);

这样达到启动 TargetActivity 的作用,但是却没有在 Intent 构造函数中直接指定 Activity。

参考资料

官方介绍并且是中文的,建议认真看看,肯定能大涨你的内力。

Android开发者官网之 Intent 和 Intent
过滤器

Android开发者官网之通用 Intent

国人写的关于 Intent 的博客,很详细而且条理清晰。

生命壹号 Android组件系列----Intent详解

最后

希望这篇 Intent 入门文章能对你有所帮助,也十分感谢你阅读我的文章。
更多 Android 开发相关文章请点击 我的主页 查看。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 202,607评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,047评论 2 379
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,496评论 0 335
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,405评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,400评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,479评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,883评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,535评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,743评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,544评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,612评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,309评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,881评论 3 306
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,891评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,136评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,783评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,316评论 2 342

推荐阅读更多精彩内容