Android не работает путь к файлу захвата видео - PullRequest
3 голосов
/ 16 марта 2011

Я работаю в приложении, которое должно запускать приложение камеры с помощью намерений; камера запускается в режиме изображения или видео, и пока она работает и сохраняет полученный файл в SDCard. Теперь проблема в том, что, хотя указание нового пользовательского имени файла работает для намерения изображения, оно, кажется, не работает для намерения видеокамеры; на самом деле, EXTRA_OUTPUT или просто «выходные данные», кажется, игнорируются в намерении видео. Я использую следующие коды:

Для картинок (все прекрасно, включая сохранение картинки с пользовательским именем файла)

// makes new unique filenames like Picture_03161185528.jpg
fileName = makeFileName("Picture")+".jpg";
path = (new StringBuilder()).
            append(Environment.getExternalStorageDirectory()).
            append("/"+fileName).toString();
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(MediaStore.ACTION_IMAGE_CAPTURE);
intent.putExtra("output", outputFileUri);        
mainActivity.startActivityForResult(intent, CAMERA_RESULT);  

Для видео (для видео требуется НО, всегда используйте имя по умолчанию, например VIDEO001, VIDEO002 и т. Д., А не нужное мне имя пользователя)

// makes new unique filenames like Video_03161185528.3gp        
fileName = makeFileName("Video")+".3gp";
// even tried this hardwired filename...but nothing
fileName = "video.3gp";
path = (new StringBuilder()).
            append(Environment.getExternalStorageDirectory()).
            append("/"+fileName).toString();
File file = new File(path);
Uri outputFileUri = Uri.fromFile(file);
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
// seems to be ignored, the file always get saved under default filename
intent.putExtra("output", outputFileUri);      
// same as previous line...seems to be ignored
intent.putExtra(MediaStore.EXTRA_OUTPUT, outputFileUri);
mainActivity.startActivityForResult(intent, VIDEO_RESULT);

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

а) Есть ли способ заставить эту работу использовать пользовательские имена файлов? б) или, альтернативно, есть ли способ заранее узнать следующее доступное имя файла по умолчанию? в) или есть какой-то другой способ узнать, какой файл был создан, а затем переименовать его?

Приветствия и спасибо!

Aram

1 Ответ

0 голосов
/ 27 января 2013

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

ContentValues values = new ContentValues();  
values.put(MediaStore.Video.Media.TITLE, "video name");                                 
values.put(MediaStore.Images.Media.DATE_TAKEN,System.currentTimeMillis());                  
//videoUri = mediastore path    
videoUri = CaptureContentFragment.this.getActivity().getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);                  
//create new Intent                     
Intent intent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);
intent.putExtra(MediaStore.EXTRA_OUTPUT, videoUri);
intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY, 1); 
intent.putExtra(MediaStore.EXTRA_DURATION_LIMIT, 20);
CaptureContentFragment.this.getActivity().startActivityForResult(intent, TabsActivity.VIDEO_REQUEST_CODE);
...