intent中取得mimetype

从intent中取得mimeType需要用到

Intent.java中的这个函数:

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


从这个方法可以看到,如果用Intent.setType(String)显式的设置了type,那么返回该type;这个时候就等同于Intent.getType()方法。


否则,会从intent的uri中,也就是Intent.setData(Uri)设置进来的uri来解析,而且必须schema为content才会有type,其余情况都会返回空。


因为content会有非常多的类型,而像tel,mailto,smsto,imto等,类型都非常单一,一般IntentFilter中只写这些schema就好了。


如果是content类型,一般IntentFilter中写action为Intent.ACTION_VIEW,然后写几组mimeType。


如联系人列表中点击联系人进入联系人详情和联系人详情点击邮政地址都是Intent.ACTION_VIEW和一个schema为content的Uri,只是mimeType不一样,


点击邮政地址进入地图查看位置,发出的mimeType就必须用resolveType()解析出来,用getType()得到的会是null,


为:android.provider.ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_ITEM_TYPE = “vnd.android.cursor.item/postal-address_v2”;


综上所述,从intent中取得mimeType,最好的方法就是用resolveType()。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值