android 上传视频

1.在页面按钮或图标控件中添加点击事件,并调用选择文件动作

    //点击图片选择视频按钮事件
    public void uploadvideo(View view){
        Intent intent = new Intent(Intent.ACTION_GET_CONTENT);   //  选择文件动作
        intent.setType("video/*");                              //  要选择的文件类型为视频
        startActivityForResult(intent,REQUEST_CODE_VIDEO);
    }

2.在 onActivityResult 方法中获取实际视频地址

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        if (requestCode == REQUEST_CODE_VIDEO && resultCode == RESULT_OK){
            Uri fileUri = data.getData();
            // 4.4及以上系统使用这个方法处理
            if(DocumentsContract.isDocumentUri(this,fileUri)){  //4.4以上版本获取路劲
                String docID = DocumentsContract.getDocumentId(fileUri);
                String id = docID.split(":")[1];
                Cursor cursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,null,
                        MediaStore.Video.Media._ID+"="+id,null,null);
                if(cursor!=null){
                    if(cursor.moveToFirst()){
                        int columnId = cursor.getColumnIndex(MediaStore.Video.Media.DATA);
                        filePath = cursor.getString(columnId);
                    }
                }
            }else {   //4.4以前获取路径
                filePath = getVideoPath(fileUri, null);
            }
            if(filePath!=null){
                //根据实际路劲获取缩略图
                Bitmap thumbnail = ThumbnailUtils.createVideoThumbnail(filePath, MediaStore.Video.Thumbnails.MINI_KIND);
                if (thumbnail != null) {
                    //对上传的视频大小进行限制
                    if(getVoidSize(filePath)>=30){
                        Tools.tips(getApplicationContext(),"视频大小不能超过30M");
                    }else{
                        //将满足条件的视频缩略图显示到ImageView控件里
                        ImageView imageView = findViewById(R.id.video_img);
                        imageView.setImageBitmap(thumbnail);
                    }
                }
            }
        }
    }

3.获取视频路劲方法

    //获取视频路劲
    private String getVideoPath(Uri uri, String selection) {
        String path = null;
        // 通过Uri和selection来获取真实的视频路径
        Cursor cursor = getContentResolver().query(uri, null, selection, null, null);
        if (cursor != null) {
            if (cursor.moveToFirst()) {
                path = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
            }
            cursor.close();
        }
        return path;
    }

4.获取视频大小方法

    //获取视频大小
    private double getVoidSize(String filePath){
        long size = Tools.getVideoSize(filePath);
        double sizeInMegabytes = 0;
        if (size > 0) {
            // 转换为可读的格式,例如MB
            sizeInMegabytes = (size / 1024.0) / 1024.0;
        }
        return sizeInMegabytes;
    }

5.上传视频方法

    //上传视频
    private void uploadVideo(String filePath,String sjid) {
        OkHttpClient okHttpClient = new OkHttpClient();
        if(filePath!=""&&filePath!=null){
            if(filePath.contains("mp4")){
                File file=new File(filePath);
                MultipartBody.Builder builder = new MultipartBody.Builder()
                        .setType(MultipartBody.FORM)
                        .addFormDataPart("video",file.getName(), RequestBody.create(MediaType.parse("video*//*"),file))
                        .addFormDataPart("sjid",sjid);
                MultipartBody  requestBody = builder.build();
                Request request = new Request.Builder()
                        .url(Quantity.url_XluploadVideo)
                        .post(requestBody)
                        .build();
                Call call = okHttpClient.newCall(request);
                call.enqueue(new Callback() {
                    @Override
                    public void onFailure(Call call, IOException e) {
                        Log.e("TAG", "onFailure: " + e);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Toast.makeText(Dkxl_main.this, "视频上传失败", Toast.LENGTH_SHORT).show();
}
});
}

                    @Override
                    public void onResponse(Call call, Response response) throws IOException {
                        Log.e("TAG", "视频上传成功" + response);
                        runOnUiThread(new Runnable() {
                            @Override
                            public void run() {
                                Tools.tips(getApplicationContext(),"视频上传成功");
                            }
                        });
                    }
                });
            }
        }
    }

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/577913.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

怎么提高职场辩论的口才能力的方法

提高职场辩论的口才能力是一个综合而复杂的过程,涉及知识积累、技巧学习、实践锻炼等多个方面。以下是关于如何提高职场辩论口才能力的详细分析和建议。 一、引言 在职场中,良好的口才能力对于个人职业发展具有重要意义。优秀的口才不仅能够提升个人的…

日志分析简单总结

1、分析日志的目的 误报:不是攻击而上报成攻击 漏报:是攻击而没有防御的情况 日志分析可以判断是否误判或者漏判,可以溯源攻击行为 在护网作为防守方必备的技能(分析NGAF和态势感知,发现异常) 2、攻击出现…

C++进阶--智能指针

智能指针的概念 智能指针是C中的一个重要概念,用于管理动态分配的对象内存。它是一个类模板,通过封装原始指针,并在对象生命周期结束时自动释放内存,从而避免了内存泄漏和资源管理的繁琐工作。 C标准库提供了多种常见的智能指针…

el-date-picker 禁用时分秒选择(包括禁用下拉框展示)

2024.04.26今天我学习了对el-date-picker进行禁用时分秒, 在使用el-date-picker组件的时候,我们有可能遇到需要把时分秒的时间固定,然后并且不能让他修改: 1714120999296 比如右上角的这个时间,我们要给它固定是‘08:…

Open3D(C++) 最小二乘拟合多项式曲线

目录 一、算法原理二、代码实现三、结果展示本文由CSDN点云侠原创,原文链接。如果你不是在点云侠的博客中看到该文章,那么此处便是不要脸的爬虫与GPT。 一、算法原理 多项式曲线表示为: p ( x ) =

使用Screenshots安装Fedora 40版本详细教程

Fedora 40是Fedora操作系统的最新版本,于 2024 年 4 月 23 日发布,是一个社区支持的 Linux 发行版,以其创新功能、领先技术和活跃的社区支持而闻名。 在本指南中,我们将引导您完成安装Fedora 40 Server的分步过程,确保…

SystemUI KeyButtonView setDarkIntensity 解析

继承自 ImageView KeyButtonDrawable intensity为0时按键颜色为白色。 intensity为1时黑色为的调用堆栈: java.lang.NullPointerException: Attempt to invoke virtual method int java.lang.String.length() on a null object referenceat com.android.systemui.…

Linux网络编程---多路I/O转接服务器(一)

多路I/O转接服务器 多路IO转接服务器也叫做多任务IO服务器。该类服务器实现的主旨思想是,不再由应用程序自己监视客户端连接,取而代之由内核替应用程序监视文件。 主要使用的方法有三种:select、poll、epoll 一、select多路IO转接 让内核去…

Java 网络编程之TCP(三):基于NIO实现服务端,BIO实现客户端

前面的文章,我们讲述了BIO的概念,以及编程模型,由于BIO中服务器端的一些阻塞的点,导致服务端对于每一个客户端连接,都要开辟一个线程来处理,导致资源浪费,效率低。 为此,Linux 内核…

边缘计算在视频监控领域的应用

一、边缘计算在视频监控领域的应用 运用边缘计算解决视频监控问题,可以带来许多优势。以下是一些具体的应用示例: 实时分析与处理:在视频监控系统中,边缘计算盒子可以实时处理和分析视频流,实现对监控画面的智能识别…

BGP选路实验(锐捷)---AS-PATH选路

实验拓扑图 基本配置如图所示 要求:R8上利用loopback口建立多个分段ip,利用bgp选路原则让双网段数据通过R6转发,单网段数据通过R7转发,这里添加as-path号建议添加自己的bgp所属的as号,以防止修改as-path后影响as-path…

❤️新版Linux零基础快速入门到精通——第二部分❤️

❤️新版Linux零基础快速入门到精通——第二部分❤️ 非科班的我!Ta!还是来了~~~2. Linux基础命令2.1 类Unix系统目录结构2.2 Linux目录结构2.2.1 Linux用户目录2.2.2 Linux目录练习 2.3 Linux 命令入门2.3.1 命令基础2.3.1.1 help2.3.1.2 man(manual)2.…

Windows Vscode ModuleNotFoundError: No module named

故障现象: Windows Vscode 经常会遇到模块路径查找失败的异常。 如运行2_from_import_test.py后,报错: 发生异常: ModuleNotFoundError No module named programmer File "D:\leolab\programmer\2_from_import_test.py", line 8…

虚拟机VMware下ROS Neotic(Ubuntu 20.04)下安装OpenCV

一、ROS安装 ROS的官方安装步骤: 1、noetic / Ubuntu 20.04 : http://wiki.ros.org/noetic/Installation/Ubuntu 2、melodic / Ubuntu 18.04: http://wiki.ros.org/melodic/Installation/Ubuntu 3、kinetic / Ubuntu 16.04: http:…

C语言:一维数组、二维数组、字符数组介绍

数组 介绍一维数组定义应用方法初始化 举例示例结果 二维数组定义应用方法初始化 举例示例结果 字符数组定义应用方法初始化 举例示例结果分析 介绍 在C语言中,数组是一种基本的数据结构,用于存储一系列相同类型的数据。数组可以是多维的,最…

phpstorm 设置变量,自动补全代码

效果 进入设置->实时模板->PHP->添加 添加动态模板->完善写法 定义->选择PHP->应用就行

什么是宏观经济的先行指标、同步指标与滞后指标

宏观经济波动是一种周期性的繁荣、衰退、萧条、复苏循环变化过程,在这种变动中,不同经济指标的变动并非总与宏观经济运行步调一致。按统计指标变动轨迹与宏观经济变动轨迹的时间关系,可以将其划分为先行指标、同步指标和滞后指标。 一、概念和作用 先行…

JetBrains CLion v2023.3.4 激活版 (C/C++ 集成开发IDE)

前言 JetBrains CLion是一款跨平台的C/C集成开发环境,由JetBrains公司推出。其最新版本支持C14几乎完全,并初步支持C17,使得编写代码更加便捷。CLion还提供了Disassembly view(反汇编视图),即使没有源代码…

《欢乐钓鱼大师》攻略:怎么在竞标赛中获得高分?

《欢乐钓鱼大师》锦标赛是游戏中的一项激动人心的钓鱼比赛活动,而在这场比赛中,如何获得高分成为了每位钓手追求的目标。在这篇攻略中,我们将为您详细介绍如何通过优化鱼竿、管理体力、利用buff和词条以及前期准备等方面来提高您在锦标赛中的…

信号分解 | RLMD(鲁棒性局部均值分解)-Matlab

分解效果 RLMD(鲁棒性局部均值分解) RLMD(鲁棒性局部均值分解)-Matlab 代码实现 % %% 清除所有变量 关闭窗口 clc clear all close all%% 导入数据 % data = xlsread(Data.xlsx);%% 输入信号%% RLMD分解 %参数进行设置 % options.display =