本文来自:安卓航班网

      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函数

java代码:

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()
// + "/" + directoryName + "/" + name + preferredExtension;
} else {
return Environment.getExternalStorageDirectory()+ "/" + directoryName + "/" + name + preferredExtension;
}
}

      恢复红色部分代码,将路径设置为手机内部文件系统文件夹。
       2:保存文件使用的URI为content://media/internal/images/media/1红色internal表名使用内部文件系统数据库
       3:修改Sqlite3_android.cpp中delete_file函数

java代码:

static void delete_file(sqlite3_context * context, int argc, sqlite3_value ** argv){
if (strncmp("/sdcard/", path, 8) != 0 && strncmp("/data/media/", path, 12)) {

sqlite3_result_null(context);

return;
}
}

      添加红色部分,文件位于手机上/data/media路径时也进行删除。这样当我们从数据库里删除一条记录时,_data数据区存取的文件路径中的文件也将自动删除。

原文地址:http://www.apkway.com/forum.php?mod=viewthread&tid=2750&extra=page%3D1

posted on 2011-08-14 20:32  泉と緣  阅读(429)  评论(0编辑  收藏  举报