ContentProvider 的 getType(Uri uri)

本文深入解析了AndroidManifest文件中activity的intent-filter配置及其与ContentProvider之间的交互,特别是如何通过ContentResolver.getType方法获取mimetype信息,以及其在隐式启动activity时的作用。

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

在manifest文件中activity会有这样的属性

<intent-filter>
    <action android:name="android.intent.action.VIEW" />
    <category android:name="android.intent.category.DEFAULT" />
    <data android:mimeType="vnd.android.cursor.dir/person" />
    <data android:mimeType="vnd.android.cursor.dir/contact" />
</intent-filter>

ContentProvider 的 getType(Uri uri) 方法,返回的就是其中对应的mimetype值,匹配manifest的话,才能启动activity。

这个方法什么时候调用呢?

startActivity(intent)
Instrumentation.execStartActivity()
Intent.resolveTypeIfNeeded()

Intent.java

    public String resolveTypeIfNeeded(ContentResolver resolver) {
        if (mComponent != null) {
            return mType;
        }
        return resolveType(resolver);
    }

    public String resolveType(ContentResolver resolver) {
        if (mType != null) {
            return mType;
        }
        if (mData != null) {
            if ("content".equals(mData.getScheme())) {
                return resolver.getType(mData);
            }
        }
        return null;
    }
如果

    1、startActivity(intent)的intent 时隐式的(即没有直接设置类名)

    2、并且没有设置type

    3、并且设置了uri(如调用了setData(uri))

那么就会调用到

ContentResolver.getType(mData)
也就调用到了 ContentProvider 的 getType(Uri uri)。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值