搜索
热搜: 活动 交友 discuz
查看: 7017|回复: 0
打印 上一主题 下一主题

Android 打开相册选择 照片、音频、视频

[复制链接]

160

主题

165

帖子

814

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
814
跳转到指定楼层
楼主
发表于 2017-6-4 10:38:03 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
  1. Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
  2.             startActivityForResult(intent, REQUEST_VIDEO_CODE);
复制代码

打开方式有两种action,1.ACTION_PICK;
2.ACTION_GET_CONTENT
区分大意为:ACTION_PICK 为打开特定数据一个列表来供用户挑选,其中数据为现有的数据。而 ACTION_GET_CONTENT 区别在于它允许用户创建一个之前并不存在的数据。


获取数据类型
1:视频
android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI


2:音频

MediaStore.Audio.Media.EXTERNAL_CONTENT_URI
3:图片

MediaStore.Images.Media.EXTERNAL_CONTENT_URI


http://www.android-doc.com/reference/android/content/Intent.html#ACTION_GET_CONTENT


  1.   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
  2.         if (requestCode == REQUEST_VIDEO_CODE) {
  3.             if (resultCode == RESULT_OK) {
  4.                 Uri uri = data.getData();
  5.                 ContentResolver cr = this.getContentResolver();
  6.                 /** 数据库查询操作。
  7.                  * 第一个参数 uri:为要查询的数据库+表的名称。
  8.                  * 第二个参数 projection : 要查询的列。
  9.                  * 第三个参数 selection : 查询的条件,相当于SQL where。
  10.                  * 第三个参数 selectionArgs : 查询条件的参数,相当于 ?。
  11.                  * 第四个参数 sortOrder : 结果排序。
  12.                  */
  13.                 Cursor cursor = cr.query(uri, null, null, null, null);
  14.                 if (cursor != null) {
  15.                     if (cursor.moveToFirst()) {
  16.                         // 视频ID:MediaStore.Audio.Media._ID
  17.                         int videoId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
  18.                         // 视频名称:MediaStore.Audio.Media.TITLE
  19.                         String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
  20.                         // 视频路径:MediaStore.Audio.Media.DATA
  21.                         String videoPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
  22.                         // 视频时长:MediaStore.Audio.Media.DURATION
  23.                         int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
  24.                         // 视频大小:MediaStore.Audio.Media.SIZE
  25.                         long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));

  26.                         // 视频缩略图路径:MediaStore.Images.Media.DATA
  27.                         String imagePath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Images.Media.DATA));
  28.                         // 缩略图ID:MediaStore.Audio.Media._ID
  29.                         int imageId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Images.Media._ID));

  30.                         // 方法一 Thumbnails 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例
  31.                         // 第一个参数为 ContentResolver,第二个参数为视频缩略图ID, 第三个参数kind有两种为:MICRO_KIND和MINI_KIND 字面意思理解为微型和迷你两种缩略模式,前者分辨率更低一些。
  32.                         Bitmap bitmap1 = MediaStore.Video.Thumbnails.getThumbnail(cr, imageId, MediaStore.Video.Thumbnails.MICRO_KIND, null);

  33.                 // 方法二 ThumbnailUtils 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例
  34.                         // 第一个参数为 视频/缩略图的位置,第二个依旧是分辨率相关的kind
  35.                         Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(imagePath, MediaStore.Video.Thumbnails.MICRO_KIND);
  36.                         // 如果追求更好的话可以利用 ThumbnailUtils.extractThumbnail 把缩略图转化为的制定大小
  37. //                        ThumbnailUtils.extractThumbnail(bitmap, width,height ,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
  38.                         setText(tv_VideoPath, R.string.path, videoPath);
  39.                         setText(tv_VideoDuration, R.string.duration, String.valueOf(duration));
  40.                         setText(tv_VideoSize, R.string.size, String.valueOf(size));
  41.                         setText(tv_VideoTitle, R.string.title, title);
  42.                         iv_VideoImage.setImageBitmap(bitmap1);
  43.                     }
  44.                     cursor.close();
  45.                 }
  46.             }
  47.             super.onActivityResult(requestCode, resultCode, data);
  48.         }
  49.     }
复制代码




回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|安卓论坛  

GMT+8, 2024-5-15 06:20 , Processed in 0.062885 second(s), 28 queries .

Powered by Discuz! X3.2

© 2001-2013 Design S!|ƽ̶

快速回复 返回顶部 返回列表