Камера Motorola Android 2.2 игнорирует параметр EXTRA_OUTPUT

#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);