Android中对多媒体操作阶段总结
1.多媒体存储机制:
当Android的系统启动的时候,系统会自动扫描sdcard内的(包括大容量存储)跟系统内存的多媒体文件,并把获得的信息保存在两个系统数据库中,以后在其他程序中如果想要访问多媒体文件的信息,其实就是在这两个数据库中进行的,而不是直接去sdcard中或者手机内存里取。两张数据库都是位于/data/data/com.android.providers.media/databases目录下。如下图所示:
名为external.db里面存储的是sdcard(包括大容量存储的媒体信息),名为internal.db存储的就是手机内存的媒体信息,比如说手机出厂时自带的一些铃声。当然如果有多张sdcard更换使用时,这时external.db不一定是固定的,或许像下图这样,但每一个名字确实对应着那张sdcard。
可以使用SQLite Expert这个工具打开这个数据库文件看一下:
这个就是存放系统内置铃声的表。
2.更新多媒体数据库:
既然其他程序中如果想要访问多媒体文件的信息,是在这两个数据库中进行的,而不是直接去sdcard中或者手机内存里取。那么当我们下载一首歌曲完成的时候可能就会需要更新播放列表,否则除了重启机器,或者拔了sdcard再插上,目前没有其他办法。好吧,发送一个广播就会把当前新下载的或者刚刚删除的文件信息同步进数据库了。
sendBroadcast(new Intent(Intent.ACTION_MEDIA_MOUNTED,
Uri.parse("file://" + Environment.getExternalStorageDirectory())));
3.程序可操作的存储路径:
Android系统中,程序可读写的路径只有两个,一个是sdcard,还有一个就是/data/data/包名,如果向/data/data/包名路径中写一个文件,很有可能写完了不能进行执行操作等,所以必要时候还要给予相应的权限。可能需要这样做:
/**
*
* 新创建的文件需要给予权限<BR>
*
* @param file 目标文件
*/
public void chmod(File file)
{
try
{
if (null == file)
{
return;
}
String command = "chmod 666 " + file.getAbsolutePath();
Log.i(TAG, "command = " + command);
Runtime runtime = Runtime.getRuntime();
runtime.exec(command);
}
catch (IOException e)
{
Log.i(TAG, "chmod fail!!!!");
}
}
摘自 火山哥的专栏
补充:移动开发 , Android ,