Android知识点和文章分享首页推荐Android知识

Android基础__Intent入门

2017-03-19  本文已影响0人  Z4Knight

简介

何为 Intent?

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

基本概念

基本用例

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

Intent 启动 Activity 过程图

两种类型

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 开发相关文章请点击 我的主页 查看。

上一篇下一篇

猜你喜欢

热点阅读