前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Android - 使用Intent在活动之间穿梭

Android - 使用Intent在活动之间穿梭

作者头像
博博1998
发布2022-04-25 15:37:17
5070
发布2022-04-25 15:37:17
举报
文章被收录于专栏:博博blog博博blog

Intent

Intent大致分为两种:显示Intent隐式Intent

显示Intent

Intent有多个构造函数的重载,其中一个 Intent(Context packageContext,Class<?>cls)

  1. 第一个参数要求提供一个启动活动的上下文,
  2. 第二个参数指定要启动的目标活动。

Activity类提供了一个startActivity()方法, 这个方法专门用于启动活动的,他接收一个Intent参数,将构建好的Intent传入。 修改按钮的点击事件:

代码语言:javascript
复制
Intent intent = new Intent(FirstActivity.this,SecondActivity.class);
startActivity(intent);

隐式Intent

隐式Intent它并不明确指出我们想要启动哪一个活动,而是指定了一系列更为抽象的actioncategory等信息,交由系统分析找出更适合的活动启动。 在<activity>标签下配置<intent-filter>的内容, 指定当前活动能够响应的action 和 category。 添加以下:

代码语言:javascript
复制
</activity>
<activity android:name=".SecondActivity">
    <intent-filter>
        <action android:name="com.bobo1998.test0420.ACTION_START" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>

在标签中我们指明了当前活动能够响应的 actioncategory 只有这两个同时匹配上Intent中指定的两个,此活动才响应该Intent。 修改按钮点击事件:

代码语言:javascript
复制
Intent intent = new Intent("com.bobo1998.test0422.ACTION_START");
startActivity(intent);

使用了Intent的另一个构造函数,直接将action的字符串传入,表明我们想要启动能够响应com.bobo1998.test0422.ACTION_START 的活动。 标签内指定的category是一种默认的,在调用startActivityg()方法会自动将category添加到Intent中。

每个Intent智能指定一个action,但能指定多个category,按钮内增加一个。

代码语言:javascript
复制
Intent intent = new Intent("com.bobo1998.test0422.ACTION_START");
intent.addCategory("com.bobo1998.test0422.MY_CATEGORY");
startActivity(intent);

指定了一个自定义的category,但是程序会崩溃,没有任何一个活动可以响应我们的Intent,因为标签内没有声明响应这个category,所以在标签内添加一个category的声明: <category android:name="com.bobo1998.test0422.MY_CATEGORY"/>

更多隐式Intent的用法

使用隐式Intent不仅可以启动自己程序内的活动,也可以启动其他程序的活动。 修改按钮点击事件:

代码语言:javascript
复制
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse("http://www.baidu.com"));
startActivity(intent);

指定了Intent的action是Intent.ACTION_VIEW 这是Android系统内置的一个动作, 常量值为:android.Intent.action.VIEW 然后通过Uri.parse()方法,将一个网址解析成Uri对象,在调用Intent的setData()方法将这个Uri对象传递进去。 setData(),接收一个Uri对象,主要用于指定当前Intent正在操作的数据,这些数据都是以字符串的形式传入到Uri.parse()方法中解析产生的。

我们还可以在<intent-filter>标签中配置一个标签,用于更精确的指定当前活动能够响应什么类型的数据。 只有标签中指定的内容和Intent中携带的Data完全一致,当前活动才能够响应该Intent。 新建一个活动,标签内配置:

代码语言:javascript
复制
<activity android:name=".ThirdActivity"
    android:label="This is ThirdActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW"/>
        <category android:name="android.intent.category.DEFAULT"/>
        <data android:scheme="http"/>
    </intent-filter>
</activity>

配置了当前活动能够响应的action是android.intent.action.VIEW的常量值, 另外在<data>标签中通过android:scheme指定了数据协议必须是http协议。

我们还可以指定很多其他协议,比如拨号,修改按钮点击事件:

代码语言:javascript
复制
Intent intent = new Intent(Intent.ACTION_DIAL);
intent.setData(Uri.parse("tel:10086"));
startActivity(intent);

指定了Intent的action是Intent.ACTION_DIAL 这也是Android系统内置的动作,data部分指定了协议是tel号码是10086

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017-04-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Intent
    • 显示Intent
      • 隐式Intent
        • 更多隐式Intent的用法
        相关产品与服务
        数据库一体机 TData
        数据库一体机 TData 是融合了高性能计算、热插拔闪存、Infiniband 网络、RDMA 远程直接存取数据的数据库解决方案,为用户提供高可用、易扩展、高性能的数据库服务,适用于 OLAP、 OLTP 以及混合负载等各种应用场景下的极限性能需求,支持 Oracle、SQL Server、MySQL 和 PostgreSQL 等各种主流数据库。
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档