支持国产操作系统国产应用!

捉蛋网

当前位置: 捉蛋网>教程>Android开发>

Android开发content provider详解

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

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

  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数据区存取的文件路径中的文件也将自动删除。

(责任编辑:捉蛋网-刷机)
............................................................................................... ...............................................................................................

 

顶一下
(0)
0%
踩一下
(0)
0%
------分隔线----------------------------