android中拍摄视频的需求很常见,今天就来说说;

1 打开系统相机

 Intent takeVideoIntent = new Intent(MediaStore.ACTION_VIDEO_CAPTURE);      if (takeVideoIntent.resolveActivity(getPackageManager()) != null) {        startActivityForResult(takeVideoIntent, REQUEST_VIDEO_CAPTURE);      }

2 结果

if (requestCode == REQUEST_VIDEO_CAPTURE) {      Uri videoUri = data.getData();      String path = VideoUtils.getPath(this, videoUri);      boolean exists = new File(path).exists();      System.out.println("ImageActivity.onActivityResult");    }

videoUtils是我自己整理的专门获取视频uri路径的工具类;

/** * Created by hou on 2017/7/10. */@SuppressLint("NewApi")public class VideoUtils {  public static String ALBUM_PATH = Environment.getExternalStorageDirectory() + "/download_img/";  //得到视频缩略图  public static Bitmap getVideoThumbnail(String filePath) {    Bitmap bitmap = null;    MediaMetadataRetriever retriever = new MediaMetadataRetriever();    try {      retriever.setDataSource(filePath);      bitmap = retriever.getFrameAtTime();    } catch (IllegalArgumentException e) {      e.printStackTrace();    } catch (RuntimeException e) {      e.printStackTrace();    } finally {      try {        retriever.release();      } catch (RuntimeException e) {        e.printStackTrace();      }    }    return bitmap;  }  //获取视频时长  public static String getDuration(String path) {    String duration;    MediaMetadataRetriever retriever = new MediaMetadataRetriever();    retriever.setDataSource(path);    duration = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_DURATION);    return duration;  }  //保存图片到本地  public static void saveFile(Bitmap bm, String imgName) {    File dirFile = new File(ALBUM_PATH);    if (!dirFile.exists()) {      dirFile.mkdir();    }    File myFile = new File(ALBUM_PATH + imgName);    try {      BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(myFile));      bm.compress(Bitmap.CompressFormat.JPEG, 80, bos);      bos.flush();      bos.close();    } catch (Exception ex) {      ex.printStackTrace();    }  }  /**   * Get a file path from a Uri. This will get the the path for Storage Access   * Framework Documents, as well as the _data field for the MediaStore and   * other file-based ContentProviders.   *   * @param context The context.   * @param uri The Uri to query.   */  public static String getPath(final Context context, final Uri uri) {    final boolean isKitKat = Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT;    // DocumentProvider    if (isKitKat && DocumentsContract.isDocumentUri(context, uri)) {      // ExternalStorageProvider      if (isExternalStorageDocument(uri)) {        final String docId = DocumentsContract.getDocumentId(uri);        final String[] split = docId.split(":");        final String type = split[0];        if ("primary".equalsIgnoreCase(type)) {          return Environment.getExternalStorageDirectory() + "/" + split[1];        }        // TODO handle non-primary volumes      }      // DownloadsProvider      else if (isDownloadsDocument(uri)) {        final String id = DocumentsContract.getDocumentId(uri);        final Uri contentUri = ContentUris.withAppendedId(            Uri.parse("content://downloads/public_downloads"), Long.valueOf(id));        return getDataColumn(context, contentUri, null, null);      }      // MediaProvider      else if (isMediaDocument(uri)) {        final String docId = DocumentsContract.getDocumentId(uri);        final String[] split = docId.split(":");        final String type = split[0];        Uri contentUri = null;        if ("image".equals(type)) {          contentUri = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;        } else if ("video".equals(type)) {          contentUri = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;        } else if ("audio".equals(type)) {          contentUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;        }        final String selection = "_id=?";        final String[] selectionArgs = new String[]{            split[1]        };        return getDataColumn(context, contentUri, selection, selectionArgs);      }    }    // MediaStore (and general)    else if ("content".equalsIgnoreCase(uri.getScheme())) {      return getDataColumn(context, uri, null, null);    }    // File    else if ("file".equalsIgnoreCase(uri.getScheme())) {      return uri.getPath();    }    return null;  }  /**   * @param uri The Uri to check.   * @return Whether the Uri authority is ExternalStorageProvider.   * @author paulburke   */  public static boolean isExternalStorageDocument(Uri uri) {    return "com.android.externalstorage.documents".equals(uri.getAuthority());  }  public static boolean isDownloadsDocument(Uri uri) {    return "com.android.providers.downloads.documents".equals(uri.getAuthority());  }  /**   * Get the value of the data column for this Uri. This is useful for   * MediaStore Uris, and other file-based ContentProviders.   *   * @param context The context.   * @param uri The Uri to query.   * @param selection (Optional) Filter used in the query.   * @param selectionArgs (Optional) Selection arguments used in the query.   * @return The value of the _data column, which is typically a file path.   * @author paulburke   */  public static String getDataColumn(Context context, Uri uri, String selection,      String[] selectionArgs) {    Cursor cursor = null;    final String column = "_data";    final String[] projection = {        column    };    try {      cursor = context.getContentResolver().query(uri, projection, selection, selectionArgs,          null);      if (cursor != null && cursor.moveToFirst()) {        final int column_index = cursor.getColumnIndexOrThrow(column);        return cursor.getString(column_index);      }    } catch (IllegalArgumentException ex) {    } finally {      if (cursor != null) {        cursor.close();      }    }    return null;  }  /**   * @param uri The Uri to check.   * @return Whether the Uri authority is MediaProvider.   * @author paulburke   */  public static boolean isMediaDocument(Uri uri) {    return "com.android.providers.media.documents".equals(uri.getAuthority());  }}

有点长!!!

3 记得加权限,这里我就不写了,6.0前后不一样的;

更多相关文章

  1. 【阿里云镜像】切换阿里巴巴开源镜像站镜像——Debian镜像
  2. Android屏幕分辨率正确获取及PX,DPI,DP,SP等的对应关系
  3. android 获取唯一标识
  4. android拍照与读取相册
  5. Android(安卓)热点开关状态的判断和获取热点ssid
  6. Android软键盘适配问题
  7. AIR Native Extension的使用(Android)一 : 打包ane
  8. 第17天android:《android从零开始》视频(1-5)
  9. android之BitMap

随机推荐

  1. 子类初始化父类的二种方法
  2. python集合类型实例
  3. 面试二三事
  4. Ansible入门
  5. 如何给脚本写一个守护进程?
  6. Django模型1对多和多对多关系
  7. DG中归档日志删除遇警告
  8. 闲聊容器的日志
  9. 介绍一款好用的终端工具 Screen
  10. Ansible入门之Playbook