一、手机影音的主要功能

 视频:上下一首、暂停播放、 手势改变音量和亮度、快进、 快退、全屏、长按屏幕暂停或恢复播放、双击屏幕全屏或者恢复、显示系统电量、显示系统时间
     音频: 上下一首、暂停播放、 歌词、播放模式、通知栏显示当前播放的音频、快进、  快退

二、主要知识点

    (1)抽取Activity、Fragment的基类
    (2)通过TextView、View、ViewPager实现TabLayout、谷歌市场中Tab的效果
    (3)NineOldAndroids实现点击字体缩放动画效果
    (4)ContentResolver内容解析者获取SD卡的本地视频列表
        第一步:通过AsyncQueryHandler和ContentResolver获取Cursor类型的本地视频列表数据
   @Overridepublic void initData() {// 指定要获取哪些列String[] projection = {Media._ID, Media.TITLE, Media.DURATION, Media.SIZE, Media.DATA};
//      Cursor cursor = getActivity().getContentResolver().query(Media.EXTERNAL_CONTENT_URI, projection , null, null, null);//异步查询帮助类避免卡死主线程AsyncQueryHandler asyncQueryHandler = new AsyncQueryHandler(getActivity().getContentResolver()) {@Overrideprotected void onQueryComplete(int token, Object cookie, Cursor cursor) {
//              Utils.printCursor(cursor);listView.setAdapter(new VideoListAdapter(getActivity(), cursor));}};int token = 0;           // 相当于Message.what(用于区分查询结果)Object cookie = null;  // 相当于Message.obj(用于传递参数)String selection = null;          // 选择条件String[] selectionArgs = null;      // 选择条件参数String orderBy = Media.TITLE + " asc"; // 排序(根据Title升序排列)asyncQueryHandler.startQuery(token, cookie, Media.EXTERNAL_CONTENT_URI, projection, selection, selectionArgs, orderBy);}

第二步:创建Cursor类型的Adapter

package com.itheima.term61.mobile.player.adapter;
import com.itheima.term61.mobile.player.R;
import com.itheima.term61.mobile.player.bean.VideoItem;
import com.itheima.term61.mobile.player.util.Utils;
import android.content.Context;
import android.database.Cursor;
import android.text.format.Formatter;
import android.view.View;
import android.view.ViewGroup;
import android.widget.CursorAdapter;
import android.widget.TextView;
public class VideoListAdapter extends CursorAdapter {public VideoListAdapter(Context context, Cursor c) {super(context, c);}@Overridepublic View newView(Context context, Cursor cursor, ViewGroup parent) {// 创建一个ViewView view = View.inflate(context, R.layout.adapter_video_list, null);ViewHolder holder = new ViewHolder();holder.tv_title = (TextView) view.findViewById(R.id.tv_title);holder.tv_duration = (TextView) view.findViewById(R.id.tv_duration);holder.tv_size = (TextView) view.findViewById(R.id.tv_size);view.setTag(holder);return view;}@Overridepublic void bindView(View view, Context context, Cursor cursor) {//绑定数据ViewHolder holder = (ViewHolder) view.getTag();VideoItem item = VideoItem.fromCursor(cursor);holder.tv_title.setText(item.getTitle());holder.tv_duration.setText(Utils.formatDuration(item.getDuration()));holder.tv_size.setText(Formatter.formatFileSize(context, item.getSize()));}class ViewHolder {/** 视频名称 */TextView tv_title;/** 视频总时长 */TextView tv_duration;/** 视频大小 */TextView tv_size;}
}

第三步:创建Video的实体类,并将cursor类型转化成对象

package com.itheima.term61.mobile.player.bean;
import java.io.Serializable;
import android.database.Cursor;
import android.provider.MediaStore.Video.Media;
public class VideoItem implements Serializable {private String title;private String data;private long duration;private long size;public static VideoItem fromCursor(Cursor cursor) {VideoItem item = new VideoItem();item.setTitle(cursor.getString(cursor.getColumnIndex(Media.TITLE)));item.setData(cursor.getString(cursor.getColumnIndex(Media.DATA)));item.setDuration(cursor.getLong(cursor.getColumnIndex(Media.DURATION)));item.setSize(cursor.getLong(cursor.getColumnIndex(Media.SIZE)));return item;}public String getTitle() {return title;}public void setTitle(String title) {this.title = title;}public String getData() {return data;}public void setData(String data) {this.data = data;}public long getDuration() {return duration;}public void setDuration(long duration) {this.duration = duration;}public long getSize() {return size;}public void setSize(long size) {this.size = size;}
}

(5)格式化时间大小

import java.text.SimpleDateFormat;
import java.util.Calendar;
public static CharSequence formatDuration(long duration) {Calendar calendar = Calendar.getInstance();calendar.clear();calendar.add(Calendar.MILLISECOND, (int) duration);long hourMillis = 1000 * 60 * 60;    // 一小时对应的毫秒数String pattern = (duration / hourMillis > 0) ? "HH:mm:ss" : "mm:ss";SimpleDateFormat format = new SimpleDateFormat(pattern);return format.format(calendar.getTime());}

1、项目搭建、本地视频列表展示相关推荐

  1. 网上书城项目的书籍分类列表展示及新书上架和热销书籍效果展示功能(项目进度四)

    网上书城项目的书籍分类列表展示及新书上架和热销书籍效果展示功能(项目进度四) 前言 需实现的目标(效果图) 书籍分类展示 新书上架展示 热销书籍展示 1.书籍分类展示(实现动态加载数据) 1.1 加载 ...

  2. iOS获取本地视频列表数据

    iOS本地的视频存在于三个地方: iTunes中影片中导入的视频文件 iTunes中通过共享文件导入的视频文件,即应用沙盒 摄像头拍摄的视频文件,可以相册找到 这三处获取视频列表方式不同. iTune ...

  3. (仿头条App项目)9.视频列表页面实现

    文章目录 视频列表页面实现 效果图 相关布局 功能实现 引入第三方视频库插件 从服务端获取数据 显示 滚动播放功能实现 视频列表页面实现 效果图 相关布局 视频VideoFragment页面放一个Li ...

  4. 使用freekan源码搭建本地视频网站,并发布公网访问

    文章目录 1.前言 2.本地网页搭建 1.1 环境使用 1.2 支持组件和环境设置 1.3 支持组件选和环境设置 1.4 网页安装 1.5 测试和使用 1.6 问题解决 3.本地网页发布 3.1 Cp ...

  5. react项目搭建本地开发环境

    1.确保你安装了较新版本的 Node.js. 2.你需要在你的机器上安装 Node >= 8.10 和 npm >= 5.6. 3.如果npm版本是5.2以上版本,在cmd中输入 npx ...

  6. Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频

    Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 (本篇博客参考<Android第一行代码(第二版)>中关于RecyclerView的部分) 列表的实 ...

  7. Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频

    Android VR Player(全景视频播放器) [7]:视频列表的实现-网络视频 前期准备 在之前的博文,Android VR Player(全景视频播放器) [6]:视频列表的实现-本地视频 ...

  8. 基于Vue3+Go本地视频管理与播放系统设计与实现

    博主介绍:某大厂从事多年后端开发(Go,C++),目前在学习前端项目,还是一名前端新手.喜欢思考一些实用的小项目并付诸实践.欢迎志同道合的小伙伴一起交流学习,同时希望得到大家的支持,如果您觉得博主的文 ...

  9. Android实现本地视频+录制视频+视频压缩上传

    今天研究了一下视频上传的处理,还包括研究可以视频压缩,本地视频.录制视频上传.本地视频获取需要适配手机,这个建议自己获取本地视频列表自己实现.不然就会出现路径找不到返回 null 好东西都是要分享给大 ...

  10. 直播、点播系统开发项目总结(本地视频、抓包视频、直播推流、网络直播、平台搭建等相关问题点记录)

    项目需求: 1.客户端实现各种格式的直播源兼容问题(组播.单播下常见直播地址格式皆可播放),以及直播分类.播放记录等: 2.客户端实现视频分类(单个视频可属于多个分类下).多格式兼容.本地数据库播放缓 ...

最新文章

  1. 【C++】explicit关键字
  2. 华西生物医学大数据中心俞鹏课题组博士后招聘启事
  3. selenium测试(Java)--鼠标事件(六)
  4. 90年代谁最强?乔丹不可撼动石佛上榜
  5. 荣耀v30pro搭载鸿蒙吗,荣耀麒麟30pro+,可以搭载鸿蒙的顶级荣耀,你买了吗?...
  6. Spring事务源码分析
  7. 原来记录系统日志那么简单【Java】【SpringBoot】【Mybatis Plus】【AspcetJ】
  8. 会计云课堂实名认证后怎么更改_离职了,税务局的会计信息还是我,老板就不更改,怎么办?...
  9. Java多态提现_Java中的多态的一些体现,重写和包装类
  10. IDL | 实验二、IDL语法基础
  11. 中英文字体对照 ueditor添加字体
  12. 水调歌头·明月几时有
  13. 雨课堂《工程伦理》期末考试答案
  14. DHSNet: Deep Hierarchical Saliency Network for Salient Object Detection阅读总结
  15. linux ubuntu 五笔输入法,ubuntu下安装fcitx五笔输入法
  16. mapreduce流量统计与自定义分区算法:手机号码按归属地输出
  17. 您可能没有权限使用网络资源,请与这台服务器的管理员联系以查明是否有访问权限
  18. 什么oracle,什么是ORACLE?
  19. 泉州信息工程学院 计算机考试,泉州信息工程学院教务网络管理系统成绩查询、网上选课查分登录入口...
  20. 微信小程序,一个有局限的类似 React Native 轮子

热门文章

  1. 微信免费检测僵尸粉方法,微信免费检测僵尸粉工具
  2. 使用Maven构建Eova项目
  3. matlab矩阵运算的应用
  4. 复盘:pearson皮尔森相关系数和spearman斯皮尔曼相关系数的区别
  5. 华为盒子显示未连接服务器,华为盒子 连接服务器地址
  6. 联想7400打印机如何与手机连到一起_激光打印机与喷墨打印机,哪个使用成本更低?...
  7. python导入鸢尾花数据集_python 鸢尾花数据集报表展示
  8. Matplotlib 可视化必备神书,附pdf下载
  9. HTML5响应式手机模板:IOS风格app手机个人中心页面模板HTML+CSS+JavaScript
  10. 2020年居家实习日志