Java代码
switch (sUriMatcher.match(uri)) switch (sUriMatcher.match(uri))来分步操作.
3. 定义MIME类型,
覆盖getType方法:主要是根据uri来返回Provider的MIME类型
Java代码
publicstaticfinal String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.shguo.sms"; ublic staticfinal String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.shguo.sms"; public static final String CONTENT_TYPE = "vnd.android.cursor.dir/vnd.shguo.sms"; public static final String CONTENT_ITEM_TYPE = "vnd.android.cursor.item/vnd.shguo.sms";getType()为:
Java代码
switch (sUriMatcher.match(uri)) { case SMS_DIR: return CONTENT_TYPE; case SMS_ITEM: return CONTENT_ITEM_TYPE; default: thrownew IllegalArgumentException("Unknown URI " + uri); } switch (sUriMatcher.match(uri)) { case SMS_DIR: return CONTENT_TYPE; case SMS_ITEM: return CONTENT_ITEM_TYPE; default: throw new IllegalArgumentException("Unknown URI " + uri); }4. 实现query, insert, delete, update四个操作。
具体的实现可以用sqlite, file等。并根据uri分情况操作。
a. query时如果是item加查询条件id.
where = "_ID=" + uri.getPathSegments().get(1) + (!TextUtils.isEmpty(where) ? " AND (" + where + ')' : "";
最后要加上
cursor.setNotificationUri(getContext().getContentResolver(), uri);
b. insert时要求uri只能是dir. 成功之后返回一个加id的uri.
Java代码
Uri insertUri = ContentUris.withAppendedId(CONTENT_URI, rowId); Uri insertUri = ContentUris.withAppendedId(CONTENT_URI, rowId);c. update、delete与query差不多。
Java代码
//注意通知注册uri的观察者。 getContext().getContentResolver().notifyChange(uri, null); //注意通知注册uri的观察者。 getContext().getContentResolver().notifyChange(uri, null);5. 在AndroidManifest.xml中定义
provider元素,主要属性有: