Intent

intent(意图),是用来沟通不同组件进行使用的一个消息传递对象,它主要有以下的用法:

  • 启动Activity
  • 启动服务
  • 传递广播

Intent两种类型

1.显示意图:

显示意图明确指出组件的名称,通常情况下,你应该会在自己的程序下使用

显示意图,因为你知道自己的Activity的名称。

2.隐式意图

不会明确指定,例如你需要一个可以打开pdf的软件,那么你应该选择合适的过滤器来

进行选择。

使用隐式意图的时候,如果存在多个应用符合你的要求,那么就会列出一个对话框,

你可以选择打开的引用。

构建Intent

Intent主要包含的内容如下:

1.组件名称

如果存在组件名称,那么这就是显示意图的一项重要因素。

2.操作(action)

指定要执行的通用操作,例如你选择打开pdf文件时出来很多应用,那么它们可能都指定了这种功能的Action。

Action的设置在AndroidManifest.xml文件中。

需要注意的是,你可以使用自己命名的action,但是这并不是最好的选择,你应该使用Intent这个

您可以使用setAction()来选择需要的操作。如果需要定义自己的操作,需要加入应用的软件包作为前缀。

3.数据

引用代操作或操作数据的MIME类型的URL.

可以使用setData设置数据url,setType设置mime类型。

4.类别

通常情况下不需要类别,下面介绍两个类别

CATEGORY_BROWSABLE

目标 Activity 允许本身通过网络浏览器启动,以显示链接引用的数据,如图像或电子邮件。

CATEGORY_LAUNCHER

该 Activity 是任务的初始 Activity,在系统的应用启动器中列出。

下面看看隐式意图的操作:

Intent intent = new Intent();
        intent.setAction(Intent.ACTION_SEND);
        intent.setType("text/plain");
        intent.putExtra(Intent.EXTRA_TEXT, "hello00");
        if (intent.resolveActivity(getPackageManager()) != null) {
            startActivity(intent);
        }

上面的代码需要说明的就是最后一句代码,如果不存在你找的应用,会抛出异常

,那么我们可以使用intent.resolveActivity(getPackgeManager)来防止这种操作。

强制使用应用选择器

通常情况下,可能存在多个应用响应intent,那么我们可以生成对话框供用户选择

想要选择的应用。

String titli="Text";
        Intent chooser=Intent.createChooser(intent,titli);//获得一个标题
        if (chooser.resolveActivity(getPackageManager()) != null) {
            startActivity(chooser);
        }

接受隐式intent

注意:要接收intent,必须将 CATEGORY_DEFAULT 类别包括在 Intent 过滤器中,

startActivity和startActivityForResult会根据这些内容解析intent。