[精]Activity 的IntentFilter

本文详细介绍了IntentFilter如何在Activity中用于过滤Intent,包括唯一匹配、多选择情况及找不到匹配时的错误处理。讲解了如何利用PackageManager进行判断,并探讨了IntentFilter的数据匹配组件data的详细用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

IntentFilter 使用来过滤意图Intent的,就是你是什么意图对应什么activity

0: 如果找到了只有一个会直接跳转

1: 如果一个意图对应了多个activity,那么会有一个选择框

2: 如果找不到对应的activity 那么会报错❌,

这个时候我们最好使用PackageManager 里面的queryIntentActivities 或者是resolveActivity 来进行一层判断


        //查看是否有这个activity,如果有再startactivity 没有的话,那么直接就
        PackageManager packageManager = getPackageManager();
        //注意这里的match 要选择MATCH_DEFAULT_ONLY, 这个是我们默认的 Intent.CATEGORY_DEFAULT

        List<ResolveInfo> resolveInfos = packageManager.queryIntentActivities(intent, PackageManager.MATCH_DEFAULT_ONLY);
        //ResolveInfo resolveInfo = packageManager.resolveActivity(intent, PackageManager.MATCH_DEFAULT_ONLY);

        for (int i = 0; i < resolveInfos.size(); i++) {
            Log.d("kodulf","i = " + i + " resolveInfos + " + resolveInfos.get(i).activityInfo);
        }

        if(resolveInfos.size()>0)
            startActivity(intent);
        else
            Log.d("kodulf","  no activity");

 

具体的怎么匹配的:IntentFilter 的三个组成部分详解:

data:

<activity android:name=".ThirdActviity">
            <intent-filter>
                <action android:name="aa.bb.cc.dd" />
                <action android:name="aa.bb.cc.dd.ee" />
                <action android:name="aa.bb.cc.dd.ee.ff" />

                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="test" />

                <data
                    android:host="www.kodulf.com"
                    android:path="/mypath"
                    android:port="8888"
                    android:scheme="lee"
                    android:mimeType="abc/xyz"/>

            </intent-filter>
        </activity>

intent 里面设置

        intent.setDataAndType(Uri.parse("lee://www.kodulf.com:8888/mypath"),"abc/xyz");

 

设置了的data和type可以通过intent 来获取

 

package bjpkten.activityintentfilterdemo;

import android.content.Intent;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class ThirdActviity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_third_actviity);
        Intent intent = getIntent();
        //type
        String type = intent.getType();
        // data
        Uri data = intent.getData();
        String dataString = intent.getDataString();

    }
}

 

参考:https://www.cnblogs.com/wolipengbo/p/3427574.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值