2

我想了解内容提供者实现以及它的工作原理。我尝试了Android SDK中的示例记事本应用程序,一切工作正常。我能够创建新的笔记并保存并编辑它们。Android的自定义内容提供者? (修改记事本示例)

我尝试将此内容提供程序更改为自定义实现。这工作正常。但我不明白以下实现

1)为什么Notepad.java在文件夹“com.example.android.notepad”中定义了两次,然后在“com.google.provider”中定义了两次。

2)意向类型“content://com.vinod.provider.NotePad/notes”如何转到列表和“content://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

1)两个文件

他们是两个不同的类 - com.example.android.notepad是实现应用程序的类。 com.google.provider.notepad是一个实现ContentProvider的类。

应用程序提供了用户界面,ContentProvider提供了数据存储。

看着This link to the Notepad ContentProvider example,它的命名更清晰。


2)URI匹配

引用NotepadProvider.java

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类型是可选的。你可能不需要对他们做任何事情。

0

在新ADT 21.1记事本示例应用: ADT-束 - 窗口x86_64的\ SDK \样品\机器人-17_1 \记事本 看起来com.google.provider文件夹不使用任何多,所以只存在一个“com.example.android.notepad”文件夹中的Notepad.java文件。