Activity隐式启动

本文详细介绍了Android中Activity隐式启动时,Intent的action、category及data的匹配规则。强调了action必须完全一致,category需全部匹配,而data部分则要求intent-filter中有指定的数据类型。同时指出,若未明确指定category,系统会默认添加android.intent.category.DEFAULT,缺少此category会导致匹配失败。

action的匹配规则

  • action在Intent-filter中可以设置多条
  • intent中的action和intent-filter中的action必须完全一样时(包括大小写)才算匹配成功
  • intent中的action只要与intent-filter其中的一条匹配成功即可
  • intent中必须指定action否则匹配失败且intent中action最多只有一条
<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="com.test.a"/>
                <action android:name="com.test.b"/>
                <category android:name="android.intent.category.DEFAULT"/>
            </intent-filter>
        </activity>

隐式启动:

button.setOnClickListener {
            val intent = Intent("com.test.a") 
            startActivity(intent)
        }

category的匹配规则

  • category在intent-filter中可以有多条
  • category在intent中也可以有多条
  • intent中所有的category都可以在intent-filter中找到一样的(包括大小写)才算匹配成功
  • 通过intent启动Activity的时候如果没有添加category会自动添加android.intent.category.DEFAULT,如果intent-filter中没有添加android.intent.category.DEFAULT则会匹配失败

data的匹配规则

data的语法

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

例如:

scheme://host:port/path|pathPrefix|pathPattern
http://www.baidu.com:80/search
  • intent-filter中可以设置多个data
  • intent中只能设置一个data
  • intent-filter中指定了data,intent中就要指定其中的一个data
  • setType会覆盖setData,setData会覆盖setType,因此需要使用setDataAndType方法来设置data和mimeType
<activity android:name=".SecondActivity">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <data
                    android:host="goods"
                    android:path="/goodsDetail"
                    android:port="8888"
                    android:scheme="detail" />
            </intent-filter>

        </activity>
button.setOnClickListener {
            val intent = Intent()
            intent.action = Intent.ACTION_VIEW
            intent.data = Uri.parse("detail://goods:8888/goodsDetail?id=100")
            startActivity(intent)
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值