我正在尝试学习内容提供程序实现及其工作原理。我在Android SDK中尝试了示例记事本应用程序,一切正常。我能够创建新笔记并保存并编辑它们。
我尝试将此内容提供程序更改为自定义实现。这工作正常。但我不明白以下的实现
1)为什么Notepad.java在文件夹中定义了两次" com.example.android.notepad"然后在" com.google.provider"中。
2)意图类型"内容如何://com.vinod.provider.NotePad/notes"转到列表和"内容://com.vinod.provider.NotePad/notes/2"去编辑活动?这是如何控制的?
3)在清单中我看到mime类型,如" vnd.android.cursor.dir / vnd.google.note"。 vnd.android.cursor.dir和vnd.android.cursor.item代表什么。什么是" vnd.google.note"
有人可以解释一下这些问题。感谢您的时间和帮助。
答案 0 :(得分:0)
1)两个档案
它们是两个不同的类 - com.example.android.notepad是一个实现应用程序的类。 com.google.provider.notepad是一个实现ContentProvider的类。
应用程序提供用户界面,ContentProvider提供数据存储。
看This link to the Notepad ContentProvider example,它的'命名更清晰。
2)URI匹配
sUriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
sUriMatcher.addURI(NotePad.AUTHORITY, "notes", NOTES);
sUriMatcher.addURI(NotePad.AUTHORITY, "notes/#", NOTE_ID);
UriMatcher采用模式列表。 NotePad.AUTHORITY
是内容URI的基础。
"notes"
是一种要匹配的模式,并返回枚举NOTES。
"notes/#"
是一种要匹配的模式,并返回枚举NOTE_ID。
switch (sUriMatcher.match(uri)) {
case NOTES:
...
break;
case NOTES:
...
break;
default:
...
break;
}
是决定基于URI运行不同代码的模式
3)MIME类型
MIME类型是可选的。你可能不需要对它们做任何事情。
答案 1 :(得分:0)
在新的ADT 21.1 NotePad示例应用中: ADT-束 - 窗口x86_64的\ SDK \样品\机器人-17_1 \记事本 看起来不再使用com.google.provider文件夹,因此“com.example.android.notepad”文件夹中只有一个Notepad.java文件。