WEB开发网
开发学院手机开发Android 开发 Android如何通过content provider构建媒体文件数据... 阅读

Android如何通过content provider构建媒体文件数据库

 2010-09-27 01:52:00 来源:WEB开发网   
核心提示:SQL的knowledge 只能猜测这个语句的意思了当然也怪偶没去学学SQL,db.execSQL("CREATE TRIGGER IF NOT EXISTS images_cleanup DELETE ON images " +"BEGIN " +"DELETE FR
SQL的knowledge 只能猜测这个语句的意思了当然也怪偶没去学学SQL。

db.execSQL("CREATE TRIGGER IF NOT EXISTS images_cleanup DELETE ON images " +

"BEGIN " +

"DELETE FROM thumbnails WHERE image_id = old._id;" +

"SELECT _DELETE_FILE(old._data);" +

"END");

创建table为 images的触发器,DELETE FROM thumbnails WHERE image_id = old._id正是删除thumbnails的意思,对于Camera创建的Images会生成一个小图片保存为thumbnail,这个记录也是自动清除的。 "SELECT _DELETE_FILE(old._data);" 应该是删除文件的意思。

在Sqlite3_android.cpp文件中还真找到delete_file这个函数,加上log,进入gallery选择一个文件删除,打出了删除文件名的全路径。

static void delete_file(sqlite3_context * context, int argc, sqlite3_value ** argv)

{

………………….

if (strncmp("/sdcard/", path, 8) != 0) { //只能删除sdcard/路径下的东西要删除其他路

sqlite3_result_null(context); //还需稍微改造一下

return;

}

……………………

}

如何将文件保存在手机上

MediaProvider中存在两个数据库一个是external对应文件系统为SD Card, 一个是内部数据库internal用于手机flash上的文件系统。遗憾的是虽然MediaProvider提供了操作内外两个数据库的功能,但在发布的应用中并没有使用这个内部文件系统。Android 默认状态下Image,audio等文件是保存在SD card上。External, internal 数据库都保存在手机文件系统上

Path: /data/data/com.android.providers.media/database/

如果要使用内部文件系统需要修改以下几个地方

1:MediaProvider generateFileName函数

private String generateFileName(boolean internal, String preferredExtension, String directoryName)

{

// create a random file

String name = String.valueOf(System.currentTimeMillis());

if (internal) {

throw new UnsupportedOperationException("Writing to internal storage is not supported.");

// return Environment.getDataDirectory()

上一页  1 2 3 4 5  下一页

Tags:Android 如何 通过

编辑录入:coldstar [复制链接] [打 印]
赞助商链接