Intent意图的深入

使用Intent可以激活Android应用三种类型的核心组件:活动、服务和广播接收者。

Intent可以划分成显式意图隐式意图

显式意图: 调用Intent.setComponent() \ Intent.setClassName或Intent.setClass()方法明确指定了组件名的Intent为显式意图,显式意图明确指定了要激活的组件是哪个组件

比如以下代码为显式意图:

@Override
            public void onClick(View view) {
                //设置跳转到其他应用
                Intent intent=new Intent();
                intent.setClassName("com.example.mysingleinstance1","com.example.mysingleinstance1.MainActivity");
                startActivity(intent);
            }
        });

隐式意图: 没有明确指定组件名的Intent为隐式意图。Android系统会根据隐式意图中设置的 动作(action)类别(category)数据(URI和数据类型) 找到最合适的组件来处理这个意图。

AndroidManifest.xml 文件中设置动作、类别、数据、

intent-filter 设置意图过滤器
action设置动作
category 设置类别

startActivity是这个方法内部为Intent自动添加的类别android.intent.category.DEFAULT 所以我们要在XML中添加

data 设置数据

相当于https://
android:scheme=“example”

域名
android:host=“www.biao.cn”

路径
android:path="/kl"/

设置数据的类型
android:mimeType=“image”

<activity
            android:name=".OtherActivity"
            android:label="新Activity"
            android:exported="true">
            <!--intent-filter意图过滤器-->
            <intent-filter>
                <!--action动作-->
                <action android:name="com.example.xxx"/>
                <!--类别category-->
                <category android:name="com.example.Other.java"/>
                <!--startActivity是这个方法内部为Intent添加的类别android.intent.category.DEFAULT-->
                <category android:name="android.intent.category.DEFAULT"/>
                <!--数据-->
                <!--只要schem和host能够匹配上就行-->
                <!--example://www.biao.cn-->                <!--限制主机名-->        <!--限制路径-->
                <data android:scheme="example" android:host="www.biao.cn" android:path="/kl"/>
                <!--设置数据的类型-->
                <data android:mimeType="image/*"/>
            </intent-filter>
        </activity>

调用隐式意图:

intent.setAction(“com.example.xxx”); 设置动作

intent.addCategory(“com.example.Other.java”); 添加类别

intent.setData(Uri.parse(“example://www.biao.cn/kl”)); 设置数据。xml文件中没限定路径就可以随便写

intent.setType(“image/jpeg”); 数据的类型。
方法内部会清除前面setData方法所设置的数据。。在setData前面设置setType也是不行的。所以我们要用Intent方法内部的setDataAndType可以同时设置数据和数据类型

intent.setDataAndType(Uri.parse(“example://www.biao.cn/kl”),“image/jpeg”); 同时设置数据和数据类型

this.findViewById(R.id.openActivity).setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                /*
                * 只要Intent中的动作(Action)和类别(Category)都出现过滤器(Intent-Filter中,就能与之匹配,否则匹配失败)
                * */

//                startActivity(new Intent(MainActivity.this,OtherActivity.class));//显式意图
                Intent intent=new Intent();//采用隐式意图激活Activity
                //设置动作
                intent.setAction("com.example.xxx");
                //添加类别
                intent.addCategory("com.example.Other.java");


                //数据的类型
                //方法内部会清除前面setData方法所设置的数据。。在setData前面设置setType也是不行的。
                // 所以我们要用Intent方法内部的setDataAndType可以同时设置数据和数据类型
                //intent.setType("image/jpeg");

                //数据
                //intent.setData(Uri.parse("example://www.biao.cn/kl"));//后面的路径可以随便写

                //同时设置数据和数据类型
                intent.setDataAndType(Uri.parse("example://www.biao.cn/kl"),"image/jpeg");


                //激活启动
                //startActivity这个方法内部会添加android.intent.category.DEFAULT。所以要在过滤器中添加才能完全匹配
                startActivity(intent);

            }
        });
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TL。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值