IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> Activity的启动方法 -> 正文阅读

[移动开发]Activity的启动方法

在这里插入图片描述

在 Android 中,界面的跳转通常是通过启动不同的 Activity 来实现的,下面介绍一下 Activity 的启动方法。

显式调用

显式调用,字面意思即”明显的调用“,我们可以在调用方法中明确的知道我们即将启动的 Activity,显示调用的具体方法如下:

val intent = Intent(this, SecondActivity::class.java)
// SecondActivity::class.java 相当于Java中的 SecondActivity.class
startActivity(intent)

我们需要构建一个 Intent 对象,第一个参数传入 this 即当前 Activity 的上下文,第二个对象传入 SecondActivity::class.java 作为目标 Activity,这样我们的意图就很明显,即我们想跳转到 SecondActivity 这个界面,我们只需要调用 startActivity 这个函数就可以达到我们的目的了。

隐式调用

隐式调用与显式调用相反,它没有明确的说明要跳转到哪个 Activity,而是通过 action, category **[?k?t?ɡ?ri] ** 和 data 这三个过滤信息由系统去匹配复合条件的 Activity。

为 Activity 设置过滤信息

如果我们想要通过隐式调用去启动一个 Activity,我们首先要为这个 Activity 设置过滤信息,否则是不能通过隐式调用去启动这个 Activity 的。过滤信息在 AndroidMainfest.xml 文件中注册 Activity 时设置,通过在 <activity> 标签下配置<intent-filter> 的内容,可以指定当前Activity能够响应的action,category和data。

<activity
    android:name=".activity.SplashActivity"
    android:theme="@style/SplashTheme">
    <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:host="room.join"
            android:scheme="bjhlliveapp" />
    </intent-filter>
</activity>

当使用隐式调用启动 Activity 时,需要同时匹配 action,category 和 data,否则匹配失败。一个 <intent-filter>下的 action,category 和 data 可以有多个,一个 activity 可以有多个 <intent-filter> 标签,只要成功匹配其中任意一个<intent-filter>中的信息即可匹配成功。

下面详细说明一下各种信息的匹配规则。

action

action 是一个字符串**(区分大小写)**,系统已经为我们预定义了一些 action,如 android.intent.action.MAIN 等,同时我们也可以自己定义 action,一个<intent-filter> 下可以有多个 action。

当我们使用隐式调用时 Intent 中必须指定 action,当 action 和 activity 的 <intent-filter> 中任意一个 action 相同**(字符串的值相同)**时,匹配成功。

category

category 和 action 一样是一个字符串,同时系统中有定义的 category,我们也可以自己定义 category,但是如果想让一个 activity 支持隐式调用,那么必须在<intent-filter> 中指定 “android.intent.category.DEFAULT” 这个 category。

category 的匹配规则与 action 不同,隐式调用时 Intent 中必须指定 action,但可以没有 category,但是如果指定了 category (可以是一个或多个),那么所有指定的 category 都要和<intent-filter> 中的 category 相同,否则匹配失败。

用通俗的话来讲,category 你可以不指定**(如果不指定一定可以匹配成功)**,但是一旦你指定了,你就要保证你指定的这些 category 都要和你即将启动的 activity 中某一个 <intent-filter> 中的category 相同。

为什么不指定反而可以匹配成功呢?因为前面说了如果 activity 支持隐式调用,则一定要有 “android.intent.category.DEFAULT” 这个 category,系统在调用 startActivity 或者 startActivityForResult 的时候会默认为 Intent 加上 “android.intent. category.DEFAULT” 这个category,所以可以匹配成功。

data

data 的语法结构如下:

<data android:scheme="string"
      android:host="string"
      android:port="string"
      android:path="string"
      android:pathPattern="string"
      android:pathPrefix="string"
      android:mimeType="string" />

data 由两部分组成,mimeType 和 URI。mimeType 指媒体类型,比如image/jpeg、audio/mpeg4-generic 和 video/* 等,可以表示图片、文本、视频等不同的媒体格式,而URI中包含的数据就比较多了,下面是URI的结构:

<scheme>://<host>:<port>/[<path>|<pathPrefix>|<pathPattern>]

例如:

content://com.example.project:200/folder/subfolder/etc
http://www.baidu.com:80/search/info

URI 中每个数据的含义如下:

  • Scheme:URI 的模式,比如http、file、content 等,如果 URI 中没有指定scheme,那么整个 URI 的其他参数无效,这也意味着 URI 是无效的。
  • Host:URI 的主机名,比如 www.baidu.com,如果 host 未指定,那么整个 URI 中的其他参数无效,这也意味着 URI 是无效的。
  • Port:URI 中的端口号,比如80,仅当 URI 中指定了 scheme 和 host 参数的时候 port 参数才是有意义的。
  • path、pathPattern 和 pathPrefix:这三个参数表述路径信息,其中 path 表示完整的路径信息;pathPattern 也表示完整的路径信息,但是它里面可以包含通配符 “*”,“*” 表示0个或多个任意字符,需要注意的是,由于正则表达式的规范,如果想表示真实的字符串,那么“*” 要写成“\*”, “\”要写成“ \\\”;pathPrefix 表示路径的前缀信息。

data 的匹配规则较为复杂,但总的来说就是 Intent 中的 data 必须和 <intent-filter> 中的一致,如果 <intent-filter> 中没有,则 Intent 也没有,如果 <intent-filter> 中有,则 Intent 中必须有切必须和 <intent-filter> 中相同。

调用方法

val intent = Intent("android.intent.action.CPW")
// intent 构造函数指定 action
intent.addCategory("android.intent.category.DEFAULT")
// addCategory 方法指定category
intent.setDataAndType(Uri.parse("file://abc"), "text/plain")
// setDataAndType 方法指定data,参数为 URI 和 mimeType
startActivity(intent)

以上就是关于 Activity 启动方法的全部内容了!

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2021-08-17 15:30:31  更:2021-08-17 15:32:11 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 10:00:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码