저는 비디오 기능 중 하나 인 미디어 기능이있는 앱을 디자인하고 있습니다. 나 자신의 카메라를 만드는 대신 카메라에 기본 호출을 사용하고 있습니다. 내가 가지고있는 문제는 비디오 파일을 캡처 한 후에는 내가 지정한 비디오 파일에 저장하지 않는다는 것입니다. 그러나 테스트 한이 문제는 재고 카메라 앱을 사용하는 삼성 휴대 전화에서만 발생합니다. 삼성 휴대 전화의 Google 카메라 또는 다른 회사의 휴대 전화를 사용하면 정상적으로 작동합니다. 이 버그는 삼성 휴대 전화의 알려진 버그입니까, 아니면 단지 잘못된 것입니까? 해결 방법이 있습니까?Android에서 동영상을 파일로 저장하기
여기 내 videoHandler입니다.
private void videoHandler() {
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
if (intent.resolveActivity(getPackageManager()) != null) {
File videoFile = null;
try {
videoFile = createVideoFile();
} catch (IOException e) {
System.out.println("Error creating file.");
}
if (videoFile != null) {
videoUri = Uri.fromFile(videoFile);
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1);
intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, 15000000L);
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 6);
startActivityForResult(intent, VIDEO_REQUEST_CODE);
}
}
}
createVideoFile을 호출합니다. 여기서 createVideoFile은 대상에 대한 비디오 파일을 미리 만듭니다.
private File createVideoFile() throws IOException {
// Create an image file name
String timeStamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
String imageFileName = "MP4_" + timeStamp + "_";
File storageDir = Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_PICTURES);
File video = File.createTempFile(
imageFileName, /* prefix */
".mp4", /* suffix */
storageDir /* directory */
);
this.videoUri = Uri.fromFile(video);
Intent mediaScanIntent = new Intent(Intent.ACTION_MEDIA_SCANNER_SCAN_FILE);
mediaScanIntent.setData(this.videoUri);
this.sendBroadcast(mediaScanIntent);
return video;
}
여기 내 onActivityResult에서 비디오를 호출하려고하면 오류가 발생합니다.
01-17 16:37:23.254 27162-28145/com.example.kevinem.blitz E/ImageLoader﹕ /storage/emulated/0/Pictures/MP4_20150117_163704_-918353230.mp4: open failed: ENOENT (No such file or directory)
java.io.FileNotFoundException: /storage/emulated/0/Pictures/MP4_20150117_163704_-918353230.mp4: open failed: ENOENT (No such file or directory)
at libcore.io.IoBridge.open(IoBridge.java:409)
at java.io.FileInputStream.<init>(FileInputStream.java:78)
at java.io.FileInputStream.<init>(FileInputStream.java:105)
at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStreamFromFile(BaseImageDownloader.java:160)
at com.nostra13.universalimageloader.core.download.BaseImageDownloader.getStream(BaseImageDownloader.java:88)
at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.getImageStream(BaseImageDecoder.java:93)
at com.nostra13.universalimageloader.core.decode.BaseImageDecoder.decode(BaseImageDecoder.java:73)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.decodeImage(LoadAndDisplayImageTask.java:264)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.tryLoadBitmap(LoadAndDisplayImageTask.java:237)
at com.nostra13.universalimageloader.core.LoadAndDisplayImageTask.run(LoadAndDisplayImageTask.java:135)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
at java.lang.Thread.run(Thread.java:841)
Caused by: libcore.io.ErrnoException: open failed: ENOENT (No such file or directory)
at libcore.io.Posix.open(Native Method)
at libcore.io.BlockGuardOs.open(BlockGuardOs.java:110)
at libcore.io.IoBridge.open(IoBridge.java:393)
오류가 있습니까? 게시 할 수있는 예외 스택 추적이 있습니까? –