阅读更多

I use the MediaStore.ACTION_VIDEO_CAPTURE intent class to capture the video, the video stored in default location(gallery),i want to store the video in specific location with specific name.

I use MediaStore.EXTRA_MEDIA_TITLE and MediaStore.EXTRA_MEDIA_OUTPUT but I don`t get the video at correct location, at least I need the path of recorded video.

 方案一:

Trick is to insert media into database before recording:

String fileName ="captureTemp.mp4";   ContentValues values =newContentValues();   values.put(MediaStore.Video.Media.TITLE, fileName);   cameraVideoURI = getContentResolver().insert(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, values);    Intent intent =newIntent(MediaStore.ACTION_VIDEO_CAPTURE);   intent.putExtra(MediaStore.EXTRA_OUTPUT, cameraVideoURI);   intent.putExtra(MediaStore.EXTRA_VIDEO_QUALITY,0); intent.putExtra(MediaStore.EXTRA_SIZE_LIMIT, MAXIMUM_VIDEO_SIZE);                startActivityForResult(intent, CAPTURE_VIDEO_INTENT); 

and then onActivityResult() use saved cameraVideoUri to reference recorded video:

       String[] projection ={MediaStore.Video.Media.DATA,MediaStore.Video.Media.SIZE  };         Cursor cursor = managedQuery(cameraVideoURI, projection,null,null,null);         int column_index_data = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);         int column_index_size = cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);         cursor.moveToFirst();         String recordedVideoFilePath = cursor.getString(column_index_data);        int recordedVideoFileSize = cursor.getInt(column_index_size); 

方案二:

The solution from Zelimir doesn't work in my case (the videos were at the right location but had a size of zero bytes). So i've found another solution:

protectedvoid onActivityResult(int requestCode,int resultCode,Intent intent){   super.onActivityResult(requestCode, resultCode, intent);    if(resultCode != RESULT_OK)return;    try{     AssetFileDescriptor videoAsset = getContentResolver().openAssetFileDescriptor(intent.getData(),"r");     FileInputStream fis = videoAsset.createInputStream();     File tmpFile =newFile(Environment.getExternalStorageDirectory(),"VideoFile.3gp");      FileOutputStream fos =newFileOutputStream(tmpFile);      byte[] buf =newbyte[1024];     int len;     while((len = fis.read(buf))>0){         fos.write(buf,0, len);     }            fis.close();     fos.close();   }catch(IOException io_e){     // TODO: handle error   } 

}

The MediaStore.EXTRA_OUTPUT and the Uri aren't necessary in this case.

更多相关文章

  1. Android(安卓)Develop Challenge
  2. Android(安卓)studio不能在布局预览的问题
  3. android弹钢琴的一个简单程序
  4. Android(安卓)Develop Challenge
  5. android源码阅读--线程间通信Handler消息机制
  6. Android(安卓)studio:Failed to create JVM:error code -4
  7. 《Pro Android(安卓)Graphics》读书笔记之第四节
  8. android调用本地录制程序获取录制文件路径的问题
  9. Android中短信拦截解决方案

随机推荐

  1. Android学习开发之路~~系列教程
  2. Android(安卓)对话框AlertDialog和AlertD
  3. Android屏幕解锁和点亮
  4. android将发送短信写入发件箱
  5. [置顶] Android如何保证一个线程最多只能
  6. Android(安卓)websocket长连接+点对点订
  7. Flutter遇到的坑
  8. Android(安卓)模拟器实现打电话
  9. python模拟android屏幕高频点击工具
  10. android模拟器中SDCard创建全解析