Android 跳转系统选择本地视频的功能

  今天在项目开发的过程中产品要求添加选择本地视频的功能,于是就翻阅和查找各种资料,进行功能的开发,但是在开发过程中发现,各种不同的品牌的手机跳转至系统选择本地视频的功能结果不太一样,所以我就对一些主流的品牌进行了测试,现做如下总结:

1.选择本地视频的功能

Button click event:

Intent intent = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Video.Media.EXTERNAL_CONTENT_URI);
            startActivityForResult(intent, REQUEST_VIDEO_CODE);

打开方式有两种action,1.ACTION_PICK;2.ACTION_GET_CONTENT 区分大意为:ACTION_PICK 为打开特定数据一个列表来供用户挑选,其中数据为现有的数据。而 ACTION_GET_CONTENT 区别在于它允许用户创建一个之前并不存在的数据。onActivityResult :
@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_VIDEO_CODE) {
            if (resultCode == RESULT_OK) {
                Uri uri = data.getData();
                ContentResolver cr = this.getContentResolver();
                /** 数据库查询操作。
                 * 第一个参数 uri:为要查询的数据库+表的名称。
                 * 第二个参数 projection : 要查询的列。
                 * 第三个参数 selection : 查询的条件,相当于SQL where。
                 * 第三个参数 selectionArgs : 查询条件的参数,相当于 ?。
                 * 第四个参数 sortOrder : 结果排序。
                 */
                Cursor cursor = cr.query(uri, null, null, null, null);
                if (cursor != null) {
                    if (cursor.moveToFirst()) {
                        // 视频ID:MediaStore.Audio.Media._ID
                        int videoId = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media._ID));
                        // 视频名称:MediaStore.Audio.Media.TITLE
                        String title = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
                        // 视频路径:MediaStore.Audio.Media.DATA
                        String videoPath = cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
                        // 视频时长:MediaStore.Audio.Media.DURATION
                        int duration = cursor.getInt(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.DURATION));
                        // 视频大小:MediaStore.Audio.Media.SIZE
                        long size = cursor.getLong(cursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE));

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

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

                        // 方法二 ThumbnailUtils 利用createVideoThumbnail 通过路径得到缩略图,保持为视频的默认比例
                        // 第一个参数为 视频/缩略图的位置,第二个依旧是分辨率相关的kind
                        Bitmap bitmap2 = ThumbnailUtils.createVideoThumbnail(imagePath, MediaStore.Video.Thumbnails.MICRO_KIND);
                        // 如果追求更好的话可以利用 ThumbnailUtils.extractThumbnail 把缩略图转化为的制定大小
//                        ThumbnailUtils.extractThumbnail(bitmap, width,height ,ThumbnailUtils.OPTIONS_RECYCLE_INPUT);
                        setText(tv_VideoPath, R.string.path, videoPath);
                        setText(tv_VideoDuration, R.string.duration, String.valueOf(duration));
                        setText(tv_VideoSize, R.string.size, String.valueOf(size));
                        setText(tv_VideoTitle, R.string.title, title);
                        iv_VideoImage.setImageBitmap(bitmap1);
                    }
                    cursor.close();
                }
            }
            super.onActivityResult(requestCode, resultCode, data);
        }2.选择本地视频的功能
  1.选择本地视频的功能2.请求系统相册有三个Action:(注意以下  图库(缩略图)   和  图片(原图)  的区别) 

ACTION_OPEN_DOCUMENT    仅限4.4或以上使用  默认打开原图 ACTION_GET_CONTENT       4.4以下默认打开缩略图  。 以上打开文件管理器 供选择,选择图库打开为缩略图页面,选择图片打开为原图浏览。 ACTION_PICK                      都可用,打开默认是缩略图界面,还需要进一步点开查看。

下面会详细介绍他们在不同版本系统中的测试结果区别:

测试系统:adroid 4.4.2   夜神模拟器content://com.android.providers.media.documents/document/image%3A1372>>ACTION_OPEN_DOCUMENT从图片获取,打开是文件管理器的图片选择器,但是只能选择图片不能选图库,也不能选择其他文件content://com.android.providers.media.documents/document/image%3A1372>>ACTION_GET_CONTENT从图片获取  打开的还是文件管理器,可以选择图库也可以选择图片 content://media/external/images/media/1372>>>>>>>>》》》ACTION_GET_CONTENT从图库获取 content://media/external/images/media/1541>>>>>>>>》》》》ACTION_PICK默认打开图库,没法选择图库还是图片  综上: uri只跟 图库还是图片选择有关,跟action无关,是选择图片还是图库才跟action有关  测试系统: android 4.4.4 ACTION_OPEN_DOCUMENT  ACTION_GET_CONTENT都是直接打开图片,页面比较漂亮 ACTION_PICK默认打开图库,界面比较丑  测试系统:android 6.0   华为 content://com.android.providers.media.documents/document/image%3A35144>>>ACTION_OPEN_DOCUMENT  不可选图库还是图片 content://com.android.providers.media.documents/document/image%3A176>  ACTION_GET_CONTENT选择图片中的  content://media/external/images/media/35144>>>>>>>>》》》》ACTION_GET_CONTENT选择图库中的  content://media/external/images/media/35144>>>>>>>>》》》》》ACTION_PICK默认打开图库,没法选择图库还是图片  测试系统:android4.2.1  华为 ACTION_GET_CONTENT  弹出图库和文件管理器,供选择 ACTION_OPEN_DOCUMENT   直接崩,不能使用 ACTION_PICK  直接打开图库   综上得出   : 结论一: ACTION_OPEN_DOCUMENT  直接打开的是图片    ACTION_GET_CONTENT       打开后可选择是图库获取还是图片获取   ACTION_PICK  直接打开的就是图库 结论二: 从图片获取到的uri 格式为:content://com.android.providers.media.documents/document/image%3A35144>>> cong图库获取到的uri格式为:content://media/external/images/media/35144>>>>>> 结论三: 4.4.4以上版本android系统,图片的界面比图库的界面好看。  结论四: content://media/external/images/media/35144这种格式,转换成路径后可以直接用 content://com.android.providers.media.documents/document/image%3A35144这种格式,转换成路径后不能直接用。  结论五: ACTION_OPEN_DOCUMENT不能在android4.4以下版本用,否则会crash,我的低版本手机系统有问题,没办法打印log所以看不到崩溃原因,猜测是取不到数据,报空

3.结果:  魅族手机调用ACTION_PICKACTION_PICK 打开图库后没有视频,一加手机也没有,但一加手机在回调中获取不到path,提示cusor中没有_data字段,华为、小米、oppo、vivo手机正常

时间: 2024-10-15 10:54:37

Android 跳转系统选择本地视频的功能的相关文章

Android - 跳转系统网络设置

全部网络设置(ACTION_WIRELESS_SETTINGS); WIFI设置(ACTION_WIFI_SETTINGS); 3G流量设置: (ACTION_DATA_ROAMING_SETTINGS). 发送Intent, 系统接收并跳转. 整体: startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS)); WIFI: startActivity(new Intent(Settings.ACTION_WIFI_SETTINGS)

选择本地视频时获取视频分辨率和时长

< video style = "display:none;" controls = "controls" id = "aa" > </video> <input type = "file" onchange = "changeFile(this)" > <script> function myFunction(ele) { //视频时长  单位秒 alert

Android分享---调用系统自带的分享功能

以前我们总想到友盟等平台分享功能的集成,集成这玩意还得下载对应的jar包.当然,用这些平台的分享并不是说什么好处都没有,至少人家的统计功能还是很实用的.不过有的时候我们是不需要多余功能的,只需要能分享就行,那我们就可以直接用Andriod系统自带有分享功能去完成了.下面我来介绍如何实现系统的分享功能: 分享文本信息 1 Intent intent = new Intent(Intent.ACTION_SEND); 2 intent.setType("text/plain"); 3 in

【.Net】在WinForm中选择本地文件

相信很多朋友在日常的编程中总会遇到各钟各样的问题,关于在WinForm中选择本地文件就是很多朋友们都认为很难的一个学习.net的难点, 在WebForm中提供了FileUpload控件来供我们选择本地文件,只要我们将该控件拖到页面上了,就已经有了选择本地文件的功能了.而在 WinForm中,并没有为我们提供集成该功能的控件,但为我们提供了OpenFileDialog类,我们可以利用该类来打开与选择本地文件. OpenFileDialog类,提供了提示用户打开文件的功能,它有如下属性和方法: 属性

Android&quot;挂逼&quot;修炼之行---微信实现本地视频发布到朋友圈功能

一.前言 前一篇文章已经详细介绍了如何使用Xposed框架编写第一个微信插件:摇骰子和猜拳作弊器  本文继续来介绍如何使用Xposed框架编写第二个微信插件,可以将本地小视频发布到朋友圈的功能.在这之前我们还是要有老套路,准备工作要做好,这里还是使用微信6.3.9版本进行操作,准备工作: 1.使用apktool工具进行反编译,微信没有做加固防护,所以这个版本的微信包反编译是没有任何问题的. 2.借助于可视化反编译工具Jadx打开微信包,后续几乎重要分析都是借助这个工具来操作的. 二.猜想与假设

Android选择本地图片并裁剪工具类

先说用法 1.开始选图(相机.相册) //这句代码启动相机拍照 SelectPicUtil.getByCamera(this); //这句代码跳转到相册选图  SelectPicUtil.getByAlbum(this); 2.处理图片,在onActivityResult中处理 protected void onActivityResult(int requestCode, int resultCode, Intent data) {   //输出图片800*400大小,选择图片时的裁剪比例是2

Android系统的远程视频修正

除苹果手机外,现在大多数手机都是采用Android系统,由于Android的开放性,不同的手机设备存在一些差异,所采集的视频数据显示出来在方向上存在一定的误差,这通常与硬件设备的驱动相关,BRAChat音视频解决方案,新增加了API接口在远程显示时,可以支持手工来修正远程视频的方向. 1.增加的API接口参数定义(以BRAChat for Web SDK为例): 1. 2.  // 远程视频方向修正标志定义 3.  varBRAC_ROTATION_FLAGS_MIRRORED       = 

android应用对系统API版本号的选择介绍

转载请注明出处[http://blog.csdn.net/y150481863/article/details/41280045] 首先我们在开发一个应用之前,特别是一个android应用,首先要考虑这个系统是运行在android版本为2.3的系统上,还是4.0的系统上或者说是支持所有android版本的系统. 有了这样的决定之后,接下来我们就需要做点事了,需要告诉系统你当前应用所能兼容的系统版本是多少,从而系统决定是否能有效并成功安装你的应用. 这就是android project中Manif

[Android 新特性] 改进明显 Android 4.4系统新特性解析

Android 4.3发布半年之后,Android 4.4随着新一代Nexus5一起出现在了用户的面前,命名为从之前的Jelly Bean(果冻豆)换成了KitKat(奇巧).这个新系统究竟都有怎样的改进.是否值得升级呢,下面就一次为你呈现Android 4.4 的新特性. KitKat不是老手机的救星 众所周知,Android机型一直存在升级难的问题.新版Android系统对配置的要求越来越高,特别是内 存,动辄1GB的需求,让老机型望洋兴叹.也使得很多廉价手机制造商往往更倾向于采用旧版 An