Android自定义内容提供商? (修改记事本示例)

时间:2011-07-27 23:42:48

标签: android android-manifest android-intent android-contentprovider

我正在尝试学习内容提供程序实现及其工作原理。我在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"

有人可以解释一下这些问题。感谢您的时间和帮助。

2 个答案:

答案 0 :(得分: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类型是可选的。你可能不需要对它们做任何事情。

答案 1 :(得分:0)

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