官方文档中提到使用Video capture intent进行录像,可以使用intent.putExtra(MediaStore.EXTRA_OUTPUT, fileUri)指定录像文件保存路径。
但是实际使用中如果指定路径,不能获取video,非常奇怪(使用2.3.3)。
上述2种做法有点绕,以下是我的解决方法,先从onActivityResult中的intent得到文件路径,然后复制到指定目录,再删除原文件
protected
void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode,
resultCode, data);
if
(resultCode == Activity.RESULT_OK) {
//将存储在默认目录下的文件拷贝到指定文件夹下,删除默认文件
String
str = null;
try
{
if
(requestCode == 1) {
Uri
uri = Uri.parse(data.getData().toString());
ContentResolver
cr = this.getContentResolver();
Cursor
cursor = cr.query(uri, null,
null,
null,
null);
cursor.moveToFirst();
str
= cursor.getString(1);
videofileName
= cursor.getString(2);
cursor.close();
}
File
destfile = new
File(strsavedir + videofileName);
File
srcfile = new
File(str);
moveFileTo(srcfile,
destfile);
super.onActivityResult(requestCode,
resultCode, data);
}
catch
(Exception e) {;
}
}
}<div><h3> </h3><pre
class="brush:js;java;auto-link:false;">public
boolean moveFileTo(File srcFile, File destFile) throws IOException {
boolean
iscopy = copyFileTo(srcFile, destFile);
if
(!iscopy)
return
false;
delFile(srcFile);
return
true;
}</pre><pre
class="brush:js;java;auto-link:false;">public
boolean copyFileTo(File srcFile, File destFile) throws IOException {
if
(srcFile.isDirectory() || destFile.isDirectory())
return
false;//
判断是否是文件
FileInputStream
fis = new
FileInputStream(srcFile);
FileOutputStream
fos = new
FileOutputStream(destFile);
int
readLen = 0;
byte[]
buf = new
byte[1024];
while
((readLen = fis.read(buf)) != -1) {
fos.write(buf,
0, readLen);
}
fos.flush();
fos.close();
fis.close();
return
true;
}
public
boolean delFile(File file) {
if
(file.isDirectory())
return
false;
return
file.delete();
}</pre></div>