#java #android #video #camera #motorola
#java #Android #Видео #камера #motorola
Вопрос:
Я программно открываю камеру, чтобы снять видео. Я говорю камере поместить видеофайл в указанное место, используя приведенный ниже код:
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
File out = new File("/sdcard/camera.mp4");
Uri uri = Uri.fromFile(out);
intent.putExtra(MediaStore.EXTRA_OUTPUT, uri);
startActivityForResult(intent, GlobalUtility.CAMERA_VIDEO);
Он хорошо работает на телефоне HTC. Но на моем moto defy он просто игнорирует MediaStore.Параметр EXTRA_OUTPUT и помещает видео в место по умолчанию.
Итак, затем я использую этот код в функции onActivityResult () для решения проблемы:
private String getRealPathFromURI(Uri contentUri) {
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
int column_index = cursor
.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
return cursor.getString(column_index);
}
String realPath;
try {
File file = new File("/sdcard/camera.mp4");
if (!file.exists()) {
Uri videoUri = data.getData();
realPath = getRealPathFromURI(videoUri);
}
} catch (Exception ex) {
Uri videoUri = data.getData();
realPath = getRealPathFromURI(videoUri);
}
Надеюсь, это поможет некоторым другим.
Комментарии:
1. спасибо за информацию .. скажите, Environment.getExternalStorageDirectory () у вас не сработал вместо передачи статического пути, такого как / sdcard???
2. Это не проблема с SD-картой. Если я делаю снимок вместо видео, «/sdcard /camera.png» хорошо работает при вызове.
Ответ №1:
То, что /sdcard/
это каталог sdcard на одном телефоне и одной сборке Android, не означает, что это останется неизменным.
Вы захотите использовать Environment.getExternalStorageDirectory()
, как предполагает комментарий Франкенштейна. Это всегда будет работать для получения каталога SD-карты.
Вы также захотите проверить, что SD-карта в данный момент подключается, поскольку телефон может находиться в режиме USB-накопителя.
Попробуйте что-то вроде…
if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
Log.d(TAG, "No SDCARD");
} else {
File out = new File(Environment.getExternalStorageDirectory() File.separator "camera.mp4");
}
Ответ №2:
Я сделал это так и до сих пор не нашел ни одного error..so пожалуйста, попробуйте это в вашем «moto defy», чтобы я мог узнать реальность.
Для вызова намерения :
Intent intent = new Intent(android.provider.MediaStore.ACTION_VIDEO_CAPTURE);
startActivityForResult(intent,2323);
В активности над результатом:
Uri contentUri = data.getData();
String[] proj = { MediaStore.Images.Media.DATA };
Cursor cursor = managedQuery(contentUri, proj, null, null, null);
int column_index = cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA);
cursor.moveToFirst();
String tmppath = cursor.getString(column_index);
videoView.setVideoPath(path);