我使用此代码录制视频并将其保存到SD卡。
MainActivity.class
public void onClickCaptImage() {
//...
folder = new File(Environment.getExternalStorageDirectory()
+ "/neoadn/neoadnVideo/");
if (!folder.exists()) {
if (!folder.mkdirs()) {
Log.d("UserFolder", "failed to create directory");
}
}
videoName = "test" + ".mp4";
file = new File(folder.getAbsolutePath() + "/" + videoName );
mVideoUri = Uri.fromFile(file);
//....
Intent intent = new Intent("android.media.action.VIDEO_CAPTURE");
intent.putExtra(MediaStore.EXTRA_OUTPUT, mVideoUri);
startActivityForResult(intent, RESULT_VIDEO_REALIZADO);
}
的AndroidManifest.xml
<uses-feature
android:name="android.hardware.camera"
android:required="true" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
此代码可在大多数设备上正常运行。问题是我在Xperia Mini Pro(4.0.4)中没有将视频保存在SD卡中而且没有出错。
我看到的唯一区别是,当Xperia Mini Pro上的完成录制直接进入主屏幕时,在我的nexus 4中显示接受或取消录制视频的选项。
当call-data.getData() - 进入onActivityResult()应用程序返回以下内容时:
05-11 20:16:04.310: I/data(4542): content://media/external/video/media/287
但是没有档案。
答案 0 :(得分:1)
最后用这段代码我可以获取文件。选择视频的uri并将具有所需名称的视频复制到文件夹
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.i("CODES", "" + requestCode + ", " + resultCode + ", " + data);
if (requestCode == RESULT_VIDEO_REALIZADO && resultCode == RESULT_OK) {
String filePath = null;
Uri _uri = data.getData();
Log.d("", "URI = " + _uri);
if (_uri != null && "content".equals(_uri.getScheme())) {
Cursor cursor = this
.getContentResolver()
.query(_uri,
new String[] { android.provider.MediaStore.Video.VideoColumns.DATA },
null, null, null);
cursor.moveToFirst();
filePath = cursor.getString(0);
cursor.close();
} else {
filePath = _uri.getPath();
}
Log.d("", "Chosen path = " + filePath);
if (!file.exists()) {
copyFile(filePath, file.toString());
Log.i("COPY", "Copy: " + videoUri.toString() + " a "
+ file.toString());
}
Log.i("uriVid", videoUri.getPath());
}
private void copyFile(String inputFile, String outputFile) {
InputStream in = null;
OutputStream out = null;
try {
// create output directory if it doesn't exist
File dir = new File(folder.toString());
if (!dir.exists()) {
dir.mkdirs();
}
in = new FileInputStream(inputFile);
out = new FileOutputStream(outputFile);
byte[] buffer = new byte[1024];
int read;
while ((read = in.read(buffer)) != -1) {
out.write(buffer, 0, read);
}
in.close();
in = null;
// write the output file (You have now copied the file)
out.flush();
out.close();
out = null;
} catch (FileNotFoundException fnfe1) {
Log.e("tag", fnfe1.getMessage());
} catch (Exception e) {
Log.e("tag", e.getMessage());
}
}
答案 1 :(得分:0)
视频录像机将视频保存到默认位置。也许这是因为mVideoUrl没有指向您期望它指向的位置。我想这可能是因为您假设文件系统使用/
作为文件夹分隔符。
尝试更改:
file = new File(folder.getAbsolutePath() + "/" + videoName);
有:
file = new File(folder, videoName);
并通过调用
检查该文件是否能够被写入file.canWrite();
见[http://developer.android.com/reference/java/io/File.html#File(java.io.File,%20java.lang.String)]