进修了ContentProvider,想做个通信录,成果在Intent和getType(Uri uri)上卡住了,经过查找材料发了然题目的地点。在这里申明下getType(Uri uri)何时被调用,和android.intent.category.DEFAULT 的懂得。
我们须要什么时辰加android.intent.category.DEFAULT呢?
1、要弄清楚这个题目,起首须要弄熟悉打听什么是implicit(隐蔽) intent什么是explicit(明白) intent。
Explicit Intent明白的指定了要启动的Acitivity ,比如以下Java代码:
Intent intent= new Intent(this, B.class)
Implicit Intent没有明白的指定要启动哪个Activity ,而是经由过程设置一些Intent Filter来让体系去筛选合适的Acitivity去启动。
2、intent到底发给哪个activity,须要进行三个匹配,一个是action,一个是category,一个是data。
理论上来说,若是intent不指定category,那么无论intent filter的内容是什么都应当是匹配的。然则,若是是implicit intent,android默认给加上一个CATEGORY_DEFAULT,如许的话若是intent filter中没有android.intent.category.DEFAULT这个category的话,匹配测试就会失败。所以,若是你的 activity支撑接管implicit intent的话就必然要在intent filter中参加android.intent.category.DEFAULT。
例外景象是:android.intent.category.MAIN和android.intent.category.LAUNCHER的filter中没有须要参加android.intent.category.DEFAULT,当然参加也没有题目。
我们定义的activity若是接管implicit intent的话,intent filer就必然要加上android.intent.category.DEFAULT这个category。
我的题目就是呈如今这里。忘怀在intent-filter中加上了<category android:name="android.intent.category.DEFAULT" />了这个。
getType(uri uri)这个办法何时被调用呢?
当我们在法度中须要启动例外的activity时,很多时辰我们是应用的隱式調用,即我们不直接指定要跳转的Activity,而是为Intent供给一些相干的参数,让其主动去和AndroidManifest.xml中已有的Activity去匹配,而IntentFilter(Intent 过滤器)在xml中有三個首要的参数:action,categary,data。
我们经由过程Intent的机关函数或者Intent供给的办法可以指定这个三个参数,如办法有:
intent.setAction(action);
intent.setData(data);
intent.addCategory(category);
等,比如在记事本法度中有:
<intent-filter android:label="@string/resolve_edit">
<action android:name="android.intent.action.VIEW" />
<action android:name="android.intent.action.EDIT" />
<action android:name="com.android.notepad.action.EDIT_NOTE" />
<category android:name="android.intent.category.DEFAULT" />
<data android:mimeType="vnd.android.cursor.item/vnd.google.note" />
</intent-filter>
我们很轻易看出action和category是很轻易匹配的,而我们传的Uri的数据怎么匹配呢,这是体系会去调用你定义的ContentProvider中的getType,取得相干的返回值來和上方的data串进行匹配,当然getType的返回成果你是须要本身去定义的。
但在法度中你也可以本身知道data的类型,就直接匹配了:intent.setType(type);
分享到:
相关推荐
androdi ContentProvider和Uri详解
本文介绍了自定义Content Provider的相关内容,完全解析内容提供者的用法。Content Provider,内容提供者,相信大家对这个组件的名字都...ContentProvider在Android中的作用是对外共享数据,也就是说你可以通过Content
ContentProvider 系统URI系统URI系统权限案例一:获取手机联系人案例二:获取手机短信案例三:获取手机图片案例四:获取手机音频案例五:获取手机视频案例六:手机联系人的增删改案例七:自动添加验证码 系统URI ...
android 自定义 ContentProvider 以及 ContentResolver
博客《ContentProvider数据库共享之——MIME类型与getType()》对应源码,博客地址:http://blog.csdn.net/harvic880925/article/details/44620851
在Content Provider中使用的查询字符串有别于标准的SQL查询 很多诸如select add delete modify等操作我们都使用一种特殊的URI来进行 这种URI由3个部分组成 “content: ” 代表数据的路径 和一个可选的标识数据的ID ...
将任务01生词本作业中生成的生词本数据库通过自定义ContentProvider的方式,共享给其他应用。 要求如下: (1) 使用自定义SQLiteOpenHelper来管理数据库; (2) 提交作业应列出操作数据的Uri及数据表的字段名称; (3) ...
public String getType(Uri uri) { // TODO Auto-generated method stub int flag=URI_MATCHER.match(uri); switch (flag) { case 2: return "vnd.android.cursor.item/contacter"; case 1: ...
ContentProvider自定义以及使用系统ContentProvider
android对sqlite、contentprovider的例子
1、Android Room操作SQLite数据 2、ContentProvider使用,使用Room进行数据库操作
ContentProvider概述 ContentProvider概述 ...ContentProvider概述ContentProvider概述ContentProvider概述ContentProvider概述ContentProvider概述 ContentProvider概述ContentProvider概述ContentProvider概述
Android中ContentProvider的示例,详细可以参见博客:http://www.cnblogs.com/plokmju/p/android_ContentProvider.html
介绍ContentProvider使用方法,包括最简单的用法,一个项目中创建多个ContentProvider分别操作数据库表,以及一个ContentProvider操作多张数据库表的用法。
ContentProvider在android中的作用是对外共享数据;本实例实现了对数据的增删改查操作
Android---获取手机联系人
contentProvider 的使用以及总结
ContentProvider 共享SharedPreferences 值