mainActivity:

package com.sxt.day07_09;

import java.util.ArrayList;
import java.util.HashMap; import android.app.Activity;
import android.content.ContentResolver;
import android.content.Context;
import android.database.Cursor;
import android.graphics.Bitmap;
import android.os.Bundle;
import android.provider.MediaStore.Video;
import android.provider.MediaStore.Video.Thumbnails;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.BaseAdapter;
import android.widget.Gallery;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.VideoView; public class MainActivity extends Activity {
ArrayList<HashMap<String, Object>> mVideos;//M
Gallery mGallery;//V
VideoAdapter mAdapter;//C,用于列表显示
VideoView mVideoView;//预览视频控件
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getVideoInfo();
initView();
setListener();
} private void setListener() {
mGallery.setOnItemClickListener(new OnItemClickListener() { @Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
HashMap<String, Object> video=mVideos.get(position);
String path=video.get(Video.Media.DATA).toString();
mVideoView.setVideoPath(path);//设置视频路径
mVideoView.start();//播放
}
});
} private void initView() {
mVideoView=(VideoView) findViewById(R.id.vv);
mGallery=(Gallery) findViewById(R.id.gallery);
mAdapter=new VideoAdapter(mVideos, this);//M添加到
mGallery.setAdapter(mAdapter);
} private void getVideoInfo() {
ContentResolver resolver = getContentResolver();
String[] projection={
Video.Media._ID,//拿到略缩图
Video.Media.DATA,//sd卡路径
Video.Media.TITLE
};
mVideos=new ArrayList<HashMap<String,Object>>();
//查询的是安卓数据库,数据库存的是多媒体文件的信息
Cursor c = resolver.query(Video.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
while(c.moveToNext()){
HashMap<String, Object> video=new HashMap<String, Object>();
video.put(Video.Media._ID, c.getInt(c.getColumnIndex(Video.Media._ID)));
video.put(Video.Media.DATA, c.getString(c.getColumnIndex(Video.Media.DATA)));
video.put(Video.Media.TITLE, c.getString(c.getColumnIndex(Video.Media.TITLE)));
mVideos.add(video);
}
} //适配器,用于列表显示
class VideoAdapter extends BaseAdapter{
ArrayList<HashMap<String, Object>> videos;
Context context; public VideoAdapter(ArrayList<HashMap<String, Object>> videos,
Context context) {
super();
this.videos = videos;
this.context = context;
} @Override
public int getCount() {
return videos.size();
} @Override
public Object getItem(int position) {
// TODO Auto-generated method stub
return null;
} @Override
public long getItemId(int position) {
// TODO Auto-generated method stub
return 0;
} @Override
//没有用缓存做优化
public View getView(int position, View layout, ViewGroup parent) {
layout=View.inflate(context, R.layout.item_video, null);
ImageView ivThumb=(ImageView) layout.findViewById(R.id.ivThumb);//显示视频略缩图
TextView tvTitle=(TextView) layout.findViewById(R.id.tvTitle);//视频标题
HashMap<String, Object> video=videos.get(position);
tvTitle.setText(video.get(Video.Media.TITLE).toString());
int id=(Integer) video.get(Video.Media._ID);
//Thumbnails类用于获取视频或者图片的略缩图,
Bitmap bm=Thumbnails.getThumbnail(getContentResolver(), id, Thumbnails.MICRO_KIND, null);
ivThumb.setImageBitmap(bm);
return layout;
}
}
}

主页面:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent" > <Gallery 水平滚动
android:id="@+id/gallery"
android:layout_width="match_parent"
android:layout_height="wrap_content" />
<VideoView 预览播放视频控件
android:id="@+id/vv"
android:layout_below="@id/gallery"
android:layout_width="match_parent"
android:layout_height="match_parent"/>
</RelativeLayout> item_view.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical" > <ImageView 每一项布局
android:id="@+id/ivThumb"
android:layout_width="80dp"
android:layout_height="80dp"
android:src="@drawable/ic_launcher"/>
<TextView
android:id="@+id/tvTitle"
android:layout_width="80dp"
android:layout_height="wrap_content"
android:text="安卓"
android:gravity="center_horizontal"/>
</LinearLayout>

android 54 播放音视频的更多相关文章

  1. Android 多媒体 播放音视频

    1.播放音频 因为涉及到读取文件,所以需要申请权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_S ...

  2. Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  3. Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)

    本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...

  4. 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)

    随笔分类 - webrtc   Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...

  5. Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会

    文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...

  6. Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验

    前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...

  7. Android IOS WebRTC 音视频开发总结(七十)-- 移动端音视频技术优化的七个方向

    最近直播很火,很多朋友对背后的技术比较感兴趣,所以今天我们整理一篇关于移动端视频优化的文章,这篇文章是我朋友在一个技术大会上分享过的,更多内容请关注我们的微信公众号:rtcblacker 视频直播为什 ...

  8. Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案

    本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...

  9. Android IOS WebRTC 音视频开发总结(二九)-- 安卓噪声消除交流

    Android上的音质一直被大家所困扰和诟病,这里面有很多原因, 下面是最近一位前UC同行发邮件跟我交流的一些记录,供参考,支持原创,文章来自博客园RTC.Blacker,转载请说明出处. 以下文字来 ...

随机推荐

  1. 图片延迟加载插件jquery.lazyload.js的使用方法

    最新版的jquery.lazyload.js已不再是伪的延迟加载了 一.请按照基本使用方法说明设置 //载入JavaScript 文件 <script src="jquery.js&q ...

  2. mysql慢速查询

    linux下配置慢查询: 修改my.cnf文件,在[mysqld]模块下添加 #slow_query_log=1 有些人说这个是slow_query的开关,但是我加上以后提示错误.log_slow_q ...

  3. VMware内安装Ubuntu后安装vmtools

    今天处于好奇安装了Ubuntu,可是虚拟机运行的时候发现界面很小,于是百度发现要安装一个工具,看了很多方法,就这个比较实用,和大家分享: 第一步:进入系统后,点击虚拟机上的安装vmware tools ...

  4. python随机数

    前提:需要导入random模块 >>>import random 1.random.random random.random()用于生成一个0到1的随机符小数: 0 <= n ...

  5. uboot 连接脚本分析

    一.脚本分析 OUTPUT_FORMAT("elf32-littlearm", "elf32-littlearm", "elf32-littlearm ...

  6. css:中文词不断开,整体换行

    一.问题   关于文字的换行与不换行的问题有些特殊情况,是使用css的word-break等属性实现不了的,下面的情况就证明了: 我们想要的效果是,一个词整体换行或不换行,“兼职测试”可以都换至第二行 ...

  7. C51应用 Modbs Rtu协议实现与KEPServerEx 通信

    最近一客户要求使用STC12C5A60S2实现Modbus Rtu协议与KEPServerEx V4.0软件通信,采集单片机P2口每位的状态,设置P0口每位的状态,实现三路AD转换其中一路采集的是C0 ...

  8. BZOJ 4013 实验比较

    Description 小D被邀请到实验室,做一个跟图片质量评价相关的主观实验.实验用到的图片集一共有\(N\)张图片,编号为\(1\)到\(N\).实验分若干轮进行,在每轮实验中,小\(D\)会被要 ...

  9. [BZOJ 1011] [HNOI2008] 遥远的行星 【近似解】

    题目链接: BZOJ - 1011 题目分析 这道题的特别之处在于,答案可以有5%的误差. 嗯..So? 我还是不会,于是看题解. 神犇的题解就是利用这误差范围求一个近似解. 怎么求近似解呢?假如 g ...

  10. Spring与Oauth2整合示例 spring-oauth-server

    原文地址:http://www.oschina.net/p/spring-oauth-server?fromerr=vpTctDBF