Камера Motorola Android 2.2 игнорирует параметр EXTRA_OUTPUT - PullRequest
4 голосов
/ 09 ноября 2011

Я программно открываю камеру, чтобы снять видео. Я приказываю камере поместить видеофайл в указанное место, используя код, подобный приведенному ниже:

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. Но, как я понимаю, он просто игнорирует параметр 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);
}

Надеюсь, это поможет некоторым другим.

Ответы [ 2 ]

0 голосов
/ 10 ноября 2011

Я поступил таким образом и до сих пор не нашел никакой ошибки .. поэтому, пожалуйста, попробуйте это в вашем "moto defy", чтобы я мог узнать реальность.

Для вызова Intent:

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);
0 голосов
/ 10 ноября 2011

Тот факт, что /sdcard/ - это каталог sdcard на одном телефоне, а одна сборка Android не означает, что он будет работать согласованно.

Вы можете использовать Environment.getExternalStorageDirectory()Комментарий Франкенштейна предполагает.Это всегда будет работать для получения каталога SD-карты.

Вы также можете проверить, что SD-карта в настоящий момент монтируется, поскольку телефон может находиться в режиме USB Storage.

Попробуйте что-нибудькак ...

if (!Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)){
    Log.d(TAG, "No SDCARD");
} else {
    File out = new File(Environment.getExternalStorageDirectory()+File.separator+"camera.mp4");     
}
...