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);
    }
}

你可能感兴趣的:(android,sqlite,中间件,Flash)