日期:2014-05-16  浏览次数:20668 次

android 增加内部flash时容易忘记的一点-数据库操作-删除文件

其他中间层做好后,发现在Gallery中无法删除flash(或sdcard)上的文件,原因是以下文件未作修改,改成如下

其中环境变量在init.rc 中定义如下

??? export EXTERNAL_STORAGE /mnt/flash
??? export EXTERNAL_FLASH_STORAGE /mnt/sdcard
??? export EXTERNAL_UDISK_STORAGE /mnt/udisk

?

?

/external/sqlite/android/sqlite3_android.cpp

?

static void delete_file(sqlite3_context * context, int argc, sqlite3_value ** argv)
{
??? if (argc != 1) {
??????? sqlite3_result_int(context, 0);
??????? return;
??? }

??? char const * path = (char const *)sqlite3_value_text(argv[0]);
??? char const * external_storage = getenv("EXTERNAL_STORAGE");
?char const * external_flash_storage = getenv("EXTERNAL_FLASH_STORAGE");
??? if ((path == NULL)||((external_storage == NULL)&&(external_flash_storage == NULL))) {
??????? sqlite3_result_null(context);
??????? return;
??? }

?if((strncmp(external_storage, path, strlen(external_storage)) != 0) \
??&&(strncmp(external_flash_storage, path, strlen(external_flash_storage)) != 0)){
??????? sqlite3_result_null(context); //之前是此处直接返回,所以媒体库上删除了图片记录,但文件并未删除
??????? return;
??? }
??? if (strstr(path, "/../") != NULL) {
??????? sqlite3_result_null(context);
??????? return;
??? }

??? int err = unlink(path);
??? if (err != -1) {
??????? // No error occured, return true
??????? sqlite3_result_int(context, 1);
??? } else {
??????? // An error occured, return false
??????? sqlite3_result_int(context, 0);
??? }
}