您的位置:首页 > 编程语言 > PHP开发

ContentProvider 的 getType(Uri uri)

2014-08-25 17:42 295 查看
在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)。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: