进修了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);
分享到:
相关推荐
ContentProvider和Uri是Android系统中两个非常重要的概念,它们主要用于数据的共享和访问。在Android平台上,ContentProvider是一种机制,允许应用程序之间安全地共享数据,而Uri(Uniform Resource Identifier)则...
3. 在ContentProvider类中实现对数据库的操作,比如`UserContentProvider`。 4. 在`AndroidManifest.xml`中注册ContentProvider。 5. 编写`UserContract`类,定义ContentProvider的URI和数据列。 6. 实现`...
Uri(统一资源标识符)用于唯一标识ContentProvider中的数据,通常由authority和路径两部分组成。 4. **使用ContentProvider步骤** - **注册ContentProvider**:在AndroidManifest.xml中添加provider标签,设置...
5. `getType(Uri uri)`:用于获取指定Uri对应的数据类型。 ContentProvider的启动与注册过程也值得深入研究。每个ContentProvider需要在AndroidManifest.xml中声明,并通过标签设置相关的属性,如name...
2. **创建ContentProvider子类**: 需要创建一个继承自ContentProvider的类,实现其关键方法,如query(), insert(), update(), delete()和getType()。这些方法对应于对数据的操作。例如,query()方法用于执行查询操作...
2. URI权限:还可以使用`grantUriPermission()`方法在运行时授予其他应用对特定URI的临时访问权限,当操作完成后,通过`revokeUriPermission()`撤销这些权限。 五、实战案例 在`contentproverDemo`项目中,你可以...
3. Provider类:继承自android.content.ContentProvider,需要实现其抽象方法,如query()、insert()、update()、delete()和getType(),以处理对数据的各种操作。 4. Cursor:ContentProvider通过Cursor对象返回数据...
此外,ContentProvider还有getType方法,用于获取指定Uri所代表数据的MIME类型,这对于处理多媒体数据尤其重要。 ContentProvider的数据操作通常与SQLite数据库结合使用,因为SQLite提供了稳定的本地存储能力。通过...
2. `insert(Uri uri, ContentValues values)`: 这个方法用于向ContentProvider中插入新的数据。`uri`参数表示要操作的数据所在的ContentProvider,而`values`参数包含要插入的新数据。 3. `delete(Uri uri, String ...
综上所述,这个Demo项目旨在教你如何实现自定义的ContentProvider,以及如何在其他应用中通过ContentResolver和Uri来访问并操作这个ContentProvider的数据。这不仅展示了Android中数据共享的基本原理,也揭示了跨...
这个URI将在其他应用中用来引用你的ContentProvider。 2. **实现Provider类**:创建一个新的Java类,继承自`ContentProvider`,并在`onCreate()`方法中初始化必要的资源,如数据库。 ```java public class ...
1. URI:唯一标识ContentProvider中的数据,由authority和path两部分组成。Authority定义了提供者,而path指定数据集。 2. MIME类型:定义了返回数据的类型,如vnd.android.cursor.dir/联系人表示返回的是联系人目录...
这些方法使用Uri(统一资源标识符)作为参数,Uri是ContentProvider的入口点,它唯一标识了ContentProvider中的某个数据项或者数据集。 1. **创建自定义ContentProvider** 自定义ContentProvider需要继承...
在ContentProvider的实现中,URI的处理通常通过`ContentURIParser`的`match`方法进行,然后根据解析结果选择适当的数据库操作。 在处理URI时,开发者通常会遇到大量使用`switch...case...`的代码来决定如何响应不同...
- `getType(Uri uri)`: 返回对应Uri的数据类型。 在我们的"mycontentprovider"项目中,你将看到这些方法的实现,演示了如何读写数据。 3. **URI匹配**:为了正确地处理来自其他应用的请求,你需要定义URI模式。...
通过`addURI(String authority, String path, int code)`方法添加Uri模式,然后在ContentProvider的方法中调用`match(Uri uri)`来获取对应的代码,以此确定要执行的操作。 4. **ContentResolver与ContentProvider的...
在Android系统中,ContentProvider是四大组件之一,它扮演着数据共享和跨应用数据访问的重要角色。本案例将深入解析ContentProvider的使用方法,并通过实际操作来加深理解。 ContentProvider是Android应用程序之间...
2. **实现ContentProvider类**:继承自ContentProvider并重写其核心方法,包括`query()`, `insert()`, `update()`, `delete()` 和 `getType()`。这些方法分别对应于数据的查询、插入、更新、删除和获取数据类型。 3...
在Android系统中,ContentProvider是一种核心组件,它扮演着数据共享和访问的桥梁角色。ContentProvider使得应用程序可以将自己的数据暴露给其他应用,同时也允许访问其他应用公开的数据。在这个实例中,我们将深入...