Android 基本(2) - Intent 基本观念与使用釐清

前言

近期想要好好地归纳与釐清一些基础观念,因此整理加分享的同步把东西整理放上来,有的部分可能比较基础请见谅

当我们有了多个 Activity 的时候我们一定会开始想到,我们该如何从一个 activity 去启动另外一个 activity,又或者我们要怎么进行两个 activity 间的资料通等等的问题,这时候最常见的方式就是使用我们今天的主角 Intent


种类

Intent 常见也常用,但是也常常忘记它其实有着两种模式(还是只有我一直忘记...= =),下方名称网路上对他们的名称有些需的差异,在这边以 android doc 上名称为主。

明确意图(Explicit intents):官方的说明有点冗长,讲白一点就是在指定启动元件的时候,我们直接使用名称(完整的类别名称)进行指定。
例如:
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);隐含意图(Implicit intents):在宣告的时候不指定给特定的元件,而是针对功能、动作进行宣告,来让定一个应用程式的元件进行处理。
例如:在APP中开启网页,系统发现手机上有chrome以及预设浏览器提供网页浏览的功能,这时候便会跳出选单让使用者选择。

建置

在建置 Intent 的时候有几个常见且主要可以包含的资讯有:

元件名称:此项为可选用,不过当我们没有填入元件名称时,这个 intent 便会成为一个「隐含」的意图,反之我们若是要建置一个「明确」的意图,则我们必须要为他指派元件名称。可以使用 setComponent()setClass()setClassName() 做设定。动作:为 intent 指定要执行的动作,以已透过使用 setAction() 进行设定,而常见的动作有 ACTION_VIEWACTION_SEND 等等。资料:通常这边提供的资料会是由 intent 来进行控制,例如要是在上一项动作设定为 ACTION_EDIT 则资料应该包含打算编辑的 URI。另外也可以根据目的进行设定,像是 setData()setType()、甚至是 setDataAndType() 。类别:用来处理intent的其他相关资讯。通常不一定类别:用来处理intent的其他相关资讯。通常大部分的 intent 是不需要加上类别的。例子如下:CATEGORY_BROWSABLE 目标的 activity可以自己使用网页浏览器启动,已显示连结所参照的资料。额外资料:这个值主要传入为了完成目的所需的其他资讯。我们可以使用各类的 putExtra() ,例如放 int 的、放 string 的、放 byte 的,甚至还可以放 array 类型的额外资料,这些种类方法都续传入两个参数:索引键名称 (key name) 与值 (value)。像是当我们建立 intent 使用 ACTION_SEND 来传送电子邮件的时候,我们可以使用 EXTRA_EMAIL 来指定收件者,并使用 EXTRA_SUBJECT 来指定主旨

範例

明确意图範例

Intent intent=newIntent(FirstActivity.this, SecondActivity.class);startActivity(intent);

这边我的例子是在两个 activity 间的互动,service相关使用可以参考 google doc 中的範例。

隐含意图範例

Intent intent = new Intent();intent.setAction(Intent.ACTION_VIEW);intent.setData(Uri.parse("https://google.com"));startActivity(intent);

这边这个例子是开启网页的使用,另外在 google doc 中的例子是发送电子邮件,也可以进行参考。


补充

前面的例子有提到,可以去唤醒其他有支援我们请求的 activity 或是 app,那反之其实我们也可以在自己的 activity 中去加入相关的声明,加入之后我们便可以在其他 activity 中去对这个请求的 intent 进行回应。

这边附上如何加入相关声明的例子:(在 AndroidMainfest.xml 中对你想要赋予声明的 activity 加入相应的内容)

<activity android:name=".ThirdActivity">    <intent-filter>        <action android:name="android.intent.action.VIEW" />        <category android:name="android.intent.category.DEFAULT" />        <category android:name="android.intent.category.BROWSABLE" />        <data android:scheme="https" />    </intent-filter></activity>

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章