android 54 播放音视频
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 播放音视频的更多相关文章
- Android 多媒体 播放音视频
1.播放音频 因为涉及到读取文件,所以需要申请权限 <uses-permission android:name="android.permission.WRITE_EXTERNAL_S ...
- Android IOS WebRTC 音视频开发总结(八十五)-- 使用WebRTC广播网络摄像头视频(下)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- Android IOS WebRTC 音视频开发总结(八十三)-- 使用WebRTC广播网络摄像头视频(上)
本文主要介绍WebRTC (我们翻译和整理的,译者:weizhenwei,校验:blacker),最早发表在[编风网] 支持原创,转载必须注明出处,欢迎关注我的微信公众号blacker(微信ID:bl ...
- 转:Android IOS WebRTC 音视频开发总结 (系列文章集合)
随笔分类 - webrtc Android IOS WebRTC 音视频开发总结(七八)-- 为什么WebRTC端到端监控很关键? 摘要: 本文主要介绍WebRTC端到端监控(我们翻译和整理的,译 ...
- Android IOS WebRTC 音视频开发总结(四六)-- 从另一个角度看国内首届WebRTC大会
文章主要从开发者角度谈国内首届WebRTC大会,支持原创,文章来自博客园RTC.Blacker,支持原创,转载必须说明出处,更多详见www.rtc.help. -------------------- ...
- Android IOS WebRTC 音视频开发总结(六)-- iOS开发之含泪经验
前段时间在搞webrtc iOS开发,所以将标题改为了Android IOS WebRTC 音视频开发总结, 下面都是开发过程中的经验总结,转载请说明出处(博客园RTC.Blacker): 1. IO ...
- Android IOS WebRTC 音视频开发总结(七十)-- 移动端音视频技术优化的七个方向
最近直播很火,很多朋友对背后的技术比较感兴趣,所以今天我们整理一篇关于移动端视频优化的文章,这篇文章是我朋友在一个技术大会上分享过的,更多内容请关注我们的微信公众号:rtcblacker 视频直播为什 ...
- Android IOS WebRTC 音视频开发总结(五七)-- 网络传输上的一种QoS方案
本文主要介绍一种QoS的解决方案,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help QoS出现的背景: 而当网络发生拥塞的时候,所有的数据流都有 ...
- Android IOS WebRTC 音视频开发总结(二九)-- 安卓噪声消除交流
Android上的音质一直被大家所困扰和诟病,这里面有很多原因, 下面是最近一位前UC同行发邮件跟我交流的一些记录,供参考,支持原创,文章来自博客园RTC.Blacker,转载请说明出处. 以下文字来 ...
随机推荐
- 关于Keil的安装与注册
由于前一段时间一直在做关于stm32f407的相关内容,于是安装的Keil是MDK5,最近一阵子想再看看51单片机以前没有做过的内容,就要再安装一个Keil C51,结果就不可避免的遇到了两个软件必须 ...
- 练习2 F题 - 平方和与立方和
Time Limit:1000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description 给定一 ...
- Successfully installed matplotlib
Installing /usr/local/lib/python2.7/dist-packages/matplotlib-1.4.0-py2.7-nspkg.pthSuccessfully insta ...
- IOS Quartz 各种绘制图形用法---实现画图片、写文字、画线、椭圆、矩形、棱形等
// Only override drawRect: if you perform custom drawing. // An empty implementation adversely affec ...
- 字符串还可以这样初始化--uboot篇
- 关于android app两次点击返回键退出的处理
现在的android app在开发时,引入了两次点击返回键退出app的设计 为了避免用户误触,这个设计很人性化 中文网上社区有些同学贴了一些实现的例子,我觉得不是很好 代码如下 public bool ...
- PyCharm 5.0.3 快捷键
下面记录PyCharm 5.0.3常用快捷键 注释 注释行:Ctrl+/
- [BZOJ 1014] [JSOI2008] 火星人prefix 【Splay + Hash】
题目链接:BZOJ - 1014 题目分析 求两个串的 LCP ,一种常见的方法就是 二分+Hash,对于一个二分的长度 l,如果两个串的长度为 l 的前缀的Hash相等,就认为他们相等. 这里有修改 ...
- C语言头文件的使用与写法
C语言中的.h文件和我认识由来已久,其使用方法虽不十分复杂,但我却是经过了几个月的“不懂”时期,几年的“一知半解”时期才逐渐认识清楚他的本来面目.揪其原因,我的驽钝和好学而不求甚解固然是原因之一,但另 ...
- Sitemesh 3 的使用及配置
1 . Sitemesh 3 简介 Sitemesh 是一个网页布局和修饰的框架,基于 Servlet 中的 Filter,类似于 ASP.NET 中的‘母版页’技术.参考:百度百科,相关类似技术:A ...