Android 开发(06)Intent 详解

Intent属性

  • Intent 的作用
    • 实现 Activity 的跳转
    • 开启一个服务(Service)
    • 传递广播(Broadcast)

一、Intent属性

1、ComponentName组件名

  • 可以用这个东西指定要跳转的 Activity
  • 其实前面我们用的就是下面的简化的写法,本质就是用 ComponentName 指定了要跳转的 Activity
ComponentName cName = new ComponentName(MainActivity.this,NextActivity.class);
intent.setComponent(cName);
startActivity(intent);
//简化为
Intent intent = new Intent(MainActivity.this,NextActivity.class);
startActivity(intent);

2、action动作

  • Action属性代表intent要执行的动作
  • 系统提供如下常用的Action属性
    ACTION_MAIN:应用程序入口点
    ACTION_VIEW:显示指定数据
    ACTION_DIAL:显示拨打电话界面
    ACTION_CALL:向指定用户打电话
    ACTION_SENDTO:向指定用户发送信息

3、data数据&Type(MIME类型)

data
  • Data属性是执行动作的URI和MIME类型,不同的Action有不同的Data数据指定
  • ACTION_EDIT Action应该和要编辑的文档URI Data匹配,ACTION_VIEW应用应该和要显示的URI匹配
  • Data属性是一个Uri对象,本质上是个字符串,常用值如下
tel::号码数据格式,后面跟电话号码
mailto::邮件数据格式,后面跟邮件收件人地址
smsto::短信数据格式,后面跟短信接收人
content::内容数据格式,后面跟需要读取的内容
file::文件数据格式,后面跟文件路径
market://search?q=pname:pkgname:市场数据格式。GoogleMarket中搜索应用
geo://lantitude,lontitude:经纬数据格式,地图上显示经纬度
// 给10086发送内容为“Hello”的短信
Uri uri = Uri.parse("smsto:10086");
Intent intent = new Intent(Intent.ACTION_SENDTO, uri);
intent.putExtra("sms_body", "Hello");
startActivity(intent);
type
  • Type是对Data的类型作进一步的说明。Type在manifest中的设置同样也在<data>标签中,是data的mimeType属性。
  • mimeType包括许多文件类型,包括图片、视频、音频等等,每种类型下也可以包含多种文件格式,以下举例部分
    在这里插入图片描述

4、Category类别

  • Category属性为 action 提供额外的附加附加类别信息
  • 一个 intent 只能有一个 action,但是可以有多个 category
  • 系统提供如下常用的Category属性
    CATEGORY_DEFAULT:默认的Category
    CATEGORY_BROWSABLE:能被浏览器安全调用
    CATEGORY_LAUNCHER:该应用的入口Activity
    CATEGORY_HOME:随系统启动而运行

1.CATEGORY_LAUNCHER需要和ACTION_MAIN同时设置(点击图标的入口)
2.如果是从其他应用跳入需要设置ACTION_MAIN

5、Extras

  • 用于多个 action 之间的数据的交换,是一个 Bundle对象,通过键值对进行数据的存储

6、Flags

  • Intent可调用addFlags()方法来为Intent添加控制标记,即设置启动模式
  • 可设置的属性部分如下:
    FLAG_ACTIVITY_NEW_TASK:默认的跳转类型,会重新创建一个新的Activity(第一种)
    FLAG_ACTIVITY_SINGLE_TOP:相当于Activity加载模式中的singletop(第二种)
    FLAG_ACTIVITY_CLEAR_TOP:相当于加载模式中的SingleTask(第三种)
    FLAG_ACTIVITY_REORDER_TO_FRONT:如果activity在task存在,拿到最顶端,不会启动新的Activity
    FLAG_ACTIVITY_NO_HISTORY:被启动的Activity一旦退出,他就不会存在于栈中

参考:https://www.cnblogs.com/anni-qianqian/p/5302947.html


Intent种类和过滤器

一、Intent 种类

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、Intent 过滤器

1、基本描述

  • 当我们使用隐式的 Intent 的时候,往往需要设置 action、data 或者 category
  • 安卓就是通过我们给 Activity 设置的 Intent 过滤器来匹配我们给 Intent 设置的这些选项的
  • 最后就会转到能够匹配上的 Activity 的界面

2、查看大图实现

  • manifest xml 关键代码
<activity android:name=".ShowActivity">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>
  • MainActivity 关键代码
Button button = (Button)findViewById(R.id.btn);
button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        Intent intent = new Intent();
        intent.setAction(intent.ACTION_VIEW);
        startActivity(intent);
    }
});
  • 最终效果
    在这里插入图片描述 在这里插入图片描述

intent 复杂数据传递

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值