Android 获取本地视频列表

2023-11-19

  • activity_video_list.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <ListView
        android:id="@+id/lv_local_video_list"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

  • local_video_list_item.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="70dp"
    android:background="@android:color/darker_gray">

    <ImageView
        android:id="@+id/iv_data"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:background="@mipmap/ic_launcher"
        tools:ignore="contentDescription"/>

    <TextView
        android:id="@+id/tv_artist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/iv_data"
        android:padding="10dp"
        tools:text="艺人名称" />

    <TextView
        android:id="@+id/tv_album"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/iv_data"
        android:layout_alignParentBottom="true"
        android:padding="10dp"
        tools:text="专辑" />

</RelativeLayout>

  • LocalVideoListActivity.java
package com.example.media.video;

import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;

import com.example.media.R;

import java.util.ArrayList;
import java.util.List;


public class LocalVideoListActivity extends AppCompatActivity {
    private static final String TAG = LocalVideoListActivity.class.getSimpleName();

    private List<VideoInfo> mVideoInfos;
    private static final String[] sLocalVideoColumns = {
            MediaStore.Video.Media._ID, // 视频id
            MediaStore.Video.Media.DATA, // 视频路径
            MediaStore.Video.Media.SIZE, // 视频字节大小
            MediaStore.Video.Media.DISPLAY_NAME, // 视频名称 xxx.mp4
            MediaStore.Video.Media.TITLE, // 视频标题
            MediaStore.Video.Media.DATE_ADDED, // 视频添加到MediaProvider的时间
            MediaStore.Video.Media.DATE_MODIFIED, // 上次修改时间,该列用于内部MediaScanner扫描,外部不要修改
            MediaStore.Video.Media.MIME_TYPE, // 视频类型 video/mp4
            MediaStore.Video.Media.DURATION, // 视频时长
            MediaStore.Video.Media.ARTIST, // 艺人名称
            MediaStore.Video.Media.ALBUM, // 艺人专辑名称
            MediaStore.Video.Media.RESOLUTION, // 视频分辨率 X x Y格式
            MediaStore.Video.Media.DESCRIPTION, // 视频描述
            MediaStore.Video.Media.IS_PRIVATE,
            MediaStore.Video.Media.TAGS,
            MediaStore.Video.Media.CATEGORY, // YouTube类别
            MediaStore.Video.Media.LANGUAGE, // 视频使用语言
            MediaStore.Video.Media.LATITUDE, // 拍下该视频时的纬度
            MediaStore.Video.Media.LONGITUDE, // 拍下该视频时的经度
            MediaStore.Video.Media.DATE_TAKEN,
            MediaStore.Video.Media.MINI_THUMB_MAGIC,
            MediaStore.Video.Media.BUCKET_ID,
            MediaStore.Video.Media.BUCKET_DISPLAY_NAME,
            MediaStore.Video.Media.BOOKMARK // 上次视频播放的位置
    };
    private static final String[] sLocalVideoThumbnailColumns = {
            MediaStore.Video.Thumbnails.DATA, // 视频缩略图路径
            MediaStore.Video.Thumbnails.VIDEO_ID, // 视频id
            MediaStore.Video.Thumbnails.KIND,
            MediaStore.Video.Thumbnails.WIDTH, // 视频缩略图宽度
            MediaStore.Video.Thumbnails.HEIGHT // 视频缩略图高度
    };

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_video_list);

        initVideoData();

        ListView lvLocalVideoList = findViewById(R.id.lv_local_video_list);
        lvLocalVideoList.setAdapter(new VideoAdapter(this, mVideoInfos));
    }

    private static class VideoAdapter extends BaseAdapter {

        private LayoutInflater mInflater;
        private List<VideoInfo> mVideoInfos;

        VideoAdapter(Context context, List<VideoInfo> videoInfos) {
            this.mVideoInfos = videoInfos;
            mInflater = LayoutInflater.from(context);
        }

        @Override
        public int getCount() {
            return mVideoInfos.size();
        }

        @Override
        public VideoInfo getItem(int position) {
            return mVideoInfos.get(position);
        }

        @Override
        public long getItemId(int position) {
            return position;
        }

        @Override
        public View getView(int position, View convertView, ViewGroup parent) {
            VideoInfoHolder holder;
            if (convertView == null) {
                convertView = mInflater.inflate(R.layout.local_video_list_item, parent, false);
                holder = new VideoInfoHolder();
                holder.ivData = convertView.findViewById(R.id.iv_data);
                holder.tvArtist = convertView.findViewById(R.id.tv_artist);
                holder.tvAlbum = convertView.findViewById(R.id.tv_album);
                convertView.setTag(holder);
            } else {
                holder = (VideoInfoHolder) convertView.getTag();
            }

            VideoInfo videoInfo = getItem(position);
            holder.ivData.setImageBitmap(BitmapFactory.decodeFile(videoInfo.thumbnailData));
            holder.tvArtist.setText(videoInfo.artist);
            holder.tvAlbum.setText(videoInfo.album);

            return convertView;
        }

        private static final class VideoInfoHolder {
            ImageView ivData;
            TextView tvArtist;
            TextView tvAlbum;
        }
    }

    private void initVideoData() {
        mVideoInfos = new ArrayList<>();

        Cursor cursor = getContentResolver().query(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, sLocalVideoColumns,
                null, null, null);
        if (cursor != null && cursor.moveToFirst()) {
            do {
                VideoInfo videoInfo = new VideoInfo();

                int id = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media._ID));
                String data = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DATA));
                long size = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.SIZE));
                String displayName = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DISPLAY_NAME));
                String title = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TITLE));
                long dateAdded = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DATE_ADDED));
                long dateModified = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DATE_MODIFIED));
                String mimeType = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.MIME_TYPE));
                long duration = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media.DURATION));
                String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.ARTIST));
                String album = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.ALBUM));
                String resolution = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.RESOLUTION));
                String description = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.DESCRIPTION));
                int isPrivate = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media.IS_PRIVATE));
                String tags = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.TAGS));
                String category = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.CATEGORY));
                double latitude = cursor.getDouble(cursor.getColumnIndex(MediaStore.Video.Media.LATITUDE));
                double longitude = cursor.getDouble(cursor.getColumnIndex(MediaStore.Video.Media.LONGITUDE));
                int dateTaken = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media.DATE_TAKEN));
                int miniThumbMagic = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media.MINI_THUMB_MAGIC));
                String bucketId = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_ID));
                String bucketDisplayName = cursor.getString(cursor.getColumnIndex(MediaStore.Video.Media.BUCKET_DISPLAY_NAME));
                int bookmark = cursor.getInt(cursor.getColumnIndex(MediaStore.Video.Media.BOOKMARK));

                Cursor thumbnailCursor = getContentResolver().query(MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI, sLocalVideoThumbnailColumns,
                        MediaStore.Video.Thumbnails.VIDEO_ID + "=" + id, null, null);
                if (thumbnailCursor != null && thumbnailCursor.moveToFirst()) {
                    do {
                        String thumbnailData = thumbnailCursor.getString(thumbnailCursor.getColumnIndex(MediaStore.Video.Thumbnails.DATA));
                        int kind = thumbnailCursor.getInt(thumbnailCursor.getColumnIndex(MediaStore.Video.Thumbnails.KIND));
                        long width = thumbnailCursor.getLong(thumbnailCursor.getColumnIndex(MediaStore.Video.Thumbnails.WIDTH));
                        long height = thumbnailCursor.getLong(thumbnailCursor.getColumnIndex(MediaStore.Video.Thumbnails.HEIGHT));

                        videoInfo.thumbnailData = thumbnailData;
                        videoInfo.kind = kind;
                        videoInfo.width = width;
                        videoInfo.height = height;
                    } while (thumbnailCursor.moveToNext());

                    thumbnailCursor.close();
                }

                videoInfo.id = id;
                videoInfo.data = data;
                videoInfo.size = size;
                videoInfo.displayName = displayName;
                videoInfo.title = title;
                videoInfo.dateAdded = dateAdded;
                videoInfo.dateModified = dateModified;
                videoInfo.mimeType = mimeType;
                videoInfo.duration = duration;
                videoInfo.artist = artist;
                videoInfo.album = album;
                videoInfo.resolution = resolution;
                videoInfo.description = description;
                videoInfo.isPrivate = isPrivate;
                videoInfo.tags = tags;
                videoInfo.category = category;
                videoInfo.latitude = latitude;
                videoInfo.longitude = longitude;
                videoInfo.dateTaken = dateTaken;
                videoInfo.miniThumbMagic = miniThumbMagic;
                videoInfo.bucketId = bucketId;
                videoInfo.bucketDisplayName = bucketDisplayName;
                videoInfo.bookmark = bookmark;

                Log.v(TAG, "videoInfo = " + videoInfo.toString());

                mVideoInfos.add(videoInfo);
            } while (cursor.moveToNext());

            cursor.close();
        }
    }

    private static final class VideoInfo {
        private int id;
        private String data;
        private long size;
        private String displayName;
        private String title;
        private long dateAdded;
        private long dateModified;
        private String mimeType;
        private long duration;
        private String artist;
        private String album;
        private String resolution;
        private String description;
        private int isPrivate;
        private String tags;
        private String category;
        private double latitude;
        private double longitude;
        private int dateTaken;
        private int miniThumbMagic;
        private String bucketId;
        private String bucketDisplayName;
        private int bookmark;

        private String thumbnailData;
        private int kind;
        private long width;
        private long height;

        @Override
        public String toString() {
            return "VideoInfo{" +
                    "id=" + id +
                    ", data='" + data + '\'' +
                    ", size=" + size +
                    ", displayName='" + displayName + '\'' +
                    ", title='" + title + '\'' +
                    ", dateAdded=" + dateAdded +
                    ", dateModified=" + dateModified +
                    ", mimeType='" + mimeType + '\'' +
                    ", duration=" + duration +
                    ", artist='" + artist + '\'' +
                    ", album='" + album + '\'' +
                    ", resolution='" + resolution + '\'' +
                    ", description='" + description + '\'' +
                    ", isPrivate=" + isPrivate +
                    ", tags='" + tags + '\'' +
                    ", category='" + category + '\'' +
                    ", latitude=" + latitude +
                    ", longitude=" + longitude +
                    ", dateTaken=" + dateTaken +
                    ", miniThumbMagic=" + miniThumbMagic +
                    ", bucketId='" + bucketId + '\'' +
                    ", bucketDisplayName='" + bucketDisplayName + '\'' +
                    ", bookmark=" + bookmark +
                    ", thumbnailData='" + thumbnailData + '\'' +
                    ", kind=" + kind +
                    ", width=" + width +
                    ", height=" + height +
                    '}';
        }
    }


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 获取本地视频列表 的相关文章

  • display aspect ratio和遥控器上的调整

    刚刚通过实验新鲜总结出来的 科普一下 一张DVD电影碟片 其解码出来的视频画面大小总是固定的 比如NTSC的DVD 总是720x480 其实不一定 但可以姑且这么认为 显示比例为4 3 不过 值得注意的是 现代的DVD Player和电视机
  • 使用FFmpeg转录网络直播流

    爱奇艺万能播放器的最新版本增加了一个播放网络流的功能 不过 入口藏在播放器区域的右键菜单里 不太好找 找来一个直播流URL 比如东森新闻 http 60 199 188 151 HLS WG ETTV N index m3u8 试了一下 还
  • Android 13 - Media框架(9)- NuPlayer::Decoder

    这一节我们将了解 NuPlayer Decoder 学习如何将 MediaCodec wrap 成一个强大的 Decoder 这一节会提前讲到 MediaCodec 相关的内容 如果看不大懂可以先跳过此篇 原先觉得 Decoder 部分简单
  • DirectShow应用——支持Windows Media格式

    大家知道 微软定义了自己的一种媒体文件类型 叫做ASF Advanced Systems Format ASF其实是一个文件 容器 它本身并没有规定音视频的压缩格式 在ASF文件中 我们可以包含任何格式的压缩的 包括MPEG 4 或非压缩的
  • GDB 命令脚本的编写以及调试技巧汇总

    在GDB调试程序的时候 如果程序带有很长的参数列表 或者调试命令本身很长 需要频繁启动调试会话时 频繁输入参数或者命令严重拖慢调试节奏 这里记录一个GDB非常有用的参数 x 可以将调试参数和调试命令以调试脚本的形式提供给GDB调试会话 这样
  • 著名的图像检索系统

    1 QBIC Query By Image Content 图像检索系统是 IBM 公司 90年代开发制作的图像和动态景象检索系统 是第一个基于内容的商业化的图像检索系统 QBIC 系统提供了多种的查询方式 包括 利用标准范图 系统自身提供
  • RTP/RTCP协议解析

    RTP协议 实时传输协议RTP Real time Transport Protocol 是一个网络传输协议 它是由IETF的多媒体传输工作小组1996年在RFC 1889中公布的 后在RFC3550中进行更新 国际电信联盟ITU T也发布
  • FFmpeg滤镜:制作图片视频流

    iPhone相册有个 为你推荐 功能 它会挑选一些照片形成一个主题 点击后可以像视频一样播放 那么 怎样才能把多张照片转成一个视频文件呢 使用FFmpeg可以这么来做 ffmpeg f image2 framerate 0 5 i D MT
  • Linux内核实时线程throtted机制

    Linux内核支持实时线程和非实时线程同时工作 并且可以给实时线程分配适当的执行比例 当超过设置的比例的时候 调度器将不再调度实时线程工作 这样做保证了即便在实时线程不主动放弃CPU的情况下 CPU的占用率也不会到 100 保证了其它线程总
  • 【大前端】android怎么获取本地视频及封面的正确姿势

    话不多说 直接贴核心代码 获取手机中所有视频的信息 private void getAllVideoInfos List
  • Android 13 - Media框架(10)- NuPlayer::Renderer

    这一节我们来了解 NuPlayer Renderer 是如何工作 avsync 机制是如何运行的 1 创建 Renderer void NuPlayer onStart int64 t startPositionUs MediaPlayer
  • webM文件解析--基于Matroska和EBML

    1 什么是webM 要说webM 先说Matroska Matroska是一个可扩展的 开源的多媒体容器 说简单点 容器的作用 就是把视频和音频封装到一个文件 使用这种容器的常见文件 一个是MKV 一个就是webM 两者的区别 无非是支持的
  • XNA是什么?

    Software will be the single most important force in digital entertainment over the next decade XNA underscores Microsoft
  • 深入理解Google Cast(三)探寻原理

    如何开发一个receiver application 先来简单说一下这个话题 Receiver本质就是一个网页 由html CSS和jacascript开发 如果要自定义receiver application 需要在 Google Cas
  • 技术宅学会几招FFmpeg

    有些时候 我需要对某个视频文件做一些简单的处理 也或者是受亲戚朋友的委托吧 又不好意思推辞 因为人家觉得你是搞技术的 这点小事应该能轻松搞定 但是 我犯不着为这点事去安装一个笨重的多媒体软件 我也不想去网上随便找个免费的小工具 怕它不干净
  • HD DVD技术概要

    中文译者 陆其明 徐成哲原文标题 HD DVD A technical introduction原文版权 DVD论坛 http www dvdforum org 原文链接 http www dvdforum org images Forum
  • 用FFmpeg制作WebP动图

    去年写过一篇文章 是教大家用FFmpeg制作GIF动画的 今天在讨论到项目中碰到的一个 apng动画素材引起的程序崩溃时 有位同学建议 我们为啥不用WebP来代替 apng 是啊 why not 网上搜到一篇文章 自己试了一下 发现强大的F
  • 15款业界公认的最佳视频处理软件

    因为需要购买昂贵的视频处理软件和高性能图形计算机 所以视频处理是一项比较耗费金钱的技术活 正是由于这样 一部分人选择使用性能较好的免费在线编辑软件 无需太多视频处理知识便可在浏览器中剪切和编辑视频 然而 当我们无法连接网络或网络很慢的时候
  • 【error】DirectShowPlayerService::doSetUrlSource: Unresolved error code 0x80070002

    解决方案 Qt 中的多媒体播放 底层是使用DirectShowPlayerService 需要一个DirectShow解码器 例如LAV Filters LAV Filters的下载地址如下 http files 1f0 de lavf L
  • 多媒体开发计算机颜色相关知识

    颜色模式 颜色模式 颜色模型和颜色空间 计算机中的颜色格式 常用的颜色模型分类 RGB颜色模型 介绍 RGB模型的颜色空间 RGB555 RGB565 RGB24 RGB32 FFMPEG中定义的RGB色彩空间 显示器的颜色空间

随机推荐

  • 7 整数反转 c++

    leetcode7 整数反转 题目描述 给出一个 32 位的有符号整数 你需要将这个整数中每位上的数字进行反转 注意 如果反转后整数溢出那么就返回 0 算法思路 使用一个64位的long long类型来存储结果整数 避免反转后结果溢出报错
  • C++ 装饰器模式

    什么是装饰器模式 装饰器模式是一种结构型设计模式 实现了在不改变现有对象结构的的同时又拓展了新的功能 装饰器本质上是对现有对象的重新包装 同时装饰器又称为封装器 如何理解装饰器模式 以笔记本电脑为例 当我们购买了一台新笔记本电脑 但我们发现
  • 在openwrt使用C语言增加ubus接口(包含C uci操作)

    在openwrt使用C语言增加ubus接口 包含C uci操作 文章目录 在openwrt使用C语言增加ubus接口 包含C uci操作 创建自己的软件包 软件包结构 编写代码和启动脚本 重点 案例大致分析 实现过程 ubus demo i
  • java调用脚本语言笔记(jython,jruby,groovy)

    java调用脚本语言笔记 jython jruby groovy 有两种方法 1 java se 6以后实现了jsr 223规范 java代码 java view plain copy ScriptEngineManager factory
  • C语言:深度解析各种数据在计算机内存中的存储

    文章目录 数据的各种类型的存储 各种数据类型的意义是什么 整形在计算机内存中的存储 原码反码补码 为什么数据的存放都是补码 什么是大小端 整形提升 什么是整型提升 那么整型提升是做什么的 如何进行整形提升 关于整型提升的例子 关于整形数据存
  • c++编写COM组件,并使用该组件

    在网上看了很多个介绍com组件的方法 对于一个新手来说看很久都看不懂 自己项目需要实现com 于是自己整理了一个文档和代码 先记录下来 以防以后用的上 步骤如下 1 新建ATL项目 你也可以是其他项目 只要是dll就行 可以支持MFC AT
  • [Excel VBA]如何拷贝数组?

    本文翻译至 http itpro nikkeibp co jp atcl column 15 090100207 090100143 ST system Variant型变量 数组 数组是可以保存多个值的 一种变量 变量是独幢楼房的话 数组
  • 详解java设计模式之-----观察者模式

    观察者模式 对象间的联动 什么是观察者模式呢 首先 看一个故事 红灯停 绿灯行 在日常生活中 交通信号灯装点着我们的城市 指挥着日益拥挤的城市交 通 当红灯亮起 来往的汽车将停止 而绿灯亮起 汽车可以继续前行 在这个过程中 交 通信号灯是汽
  • 串行接口的工作原理和实现

    串口的结构和工作原理 通用异步收发传输器 Universal Asynchronous Receiver Transmitter 通常称作UART 它将要传输的资料在串行通信与并行通信之间加以转换 作为把并行输入信号转成串行输出信号的芯片
  • postman接口测试的关联测试

    在接口测试中 很多时候需要依赖前一个请求的响应数据关联到后一个请求的请求数据中来 在postman的中有一个Pre request Script 板块 如示例接口为 https api weixin qq com cgi bin user
  • Java面向对象基础

    文章目录 面向对象 一 类和对象 1 类的介绍 2 类和对象的关系 3 类的组成 4 创建对象和使用对象的格式 二 对象内存图 1 单个对象内存图 2 两个对象内存图 3 两个引用指向相同内存图 三 成员变量和局部变量 四 this 关键字
  • 栈(Stack)——class Stack 和 class Stack T 实现

    对于Stack类的实现 跟之前链表实现也一样 只是封装成为面向对象的类了 PS 这里是线式存储的类和模板实现 链表式的实际上写法也是一样的 class Stack代码如下 mystack h include
  • 信奥一本通 贪心算法 回顾

    文章目录 写在前面 A 家庭作业 B 智力大冲浪 C 加工生产调度 D 喷水装置3 线段覆盖最少线段 E 活动安排 线段覆盖 覆盖最多段 F 种树 G 数列极差 H 数列分段 I 钓鱼 J 均分纸牌 K 糖果传递 写在前面 之前看到一篇非常
  • java中的双端队列deque使用以及部分原理

    转载自 https www cnblogs com denglh p 7911513 html package collections import java util Deque import java util LinkedList P
  • 对于金融机构而言,为什么选择私有化 IM 比企业微信、钉钉更好?

    一 金融机构数字化转型迈向规范有序 更成体系的新阶段 当前 新一轮信息技术革命浪潮拉开序幕 以人工智能 大数据 云计算等为代表的数字技术正在重构全球经济 不少企业也纷纷拥抱数字化浪潮 开展全方位的变革和升级 中国银保监会印发 关于银行业保险
  • char字符表

    图片来源于网上
  • 如何在 GitHub 上找到免费且实用的软件?

    GitHub 虽说是以程序员为主的社区 但是上面托管的项目类型却风格迥异 有认真科研型的 也有上班划水型的 有面向极客宅男的开发工具 也有给小白麻瓜使用的普通软件 本周写了几篇文章 大多都在介绍与技术相关的开发工具与技巧 今天稍微调整一下
  • 生成csv文件并下载

    在做项目中 我们做一个功能的时候 可能要把数据做导出或下载处理 下载成各种格式 下面提供了一种excel下载格式 csv 将得到的数据 经过处理生成csv文件 并激活下载到本地 代码如下
  • 云计算目前国内外发展现状是什么,云计算主要存在哪些问题?

    远在 云计算 的名次出现之前 我国相关科技人员便已对互联网的透明资源储备技术进行了多方面应用 而随着科技的不断进步 对于云计算的应用愈加频繁 政府部门对云计算的建设提供了经济基础与社会软环境的保障 并且在国家科研部门当中设立了专业的部门 直
  • Android 获取本地视频列表

    activity video list xml