Android MediaStore检索视频并播放

该文章是为了检索手机上sd卡中的视频,然后将检索出来的相应视频的缩略图,名称等视频信息显示在ListView上。点击每个item后播放相应的视频。

源代码:

布局文件:

activity_main:

<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="match_parent" >

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

</RelativeLayout>

list_item:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/imageView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

    <TextView
        android:id="@+id/textView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</LinearLayout>

代码文件:

MainActivity.java:

package com.multimediademo13mediastore;

import java.io.File;
import java.util.ArrayList;
import android.app.Activity;
import android.content.Intent;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;

public class MainActivity extends Activity implements OnItemClickListener {
	private ListView listView;
	private Cursor cursor;

	@SuppressWarnings("deprecation")
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);

		listView = (ListView) findViewById(R.id.listView);
		/**
		 * 从MediaStore.Video.Thumbnail查询中获得的列的列表。
		 */
		String[] thumbColumns = { MediaStore.Video.Thumbnails.DATA,
				MediaStore.Video.Thumbnails.VIDEO_ID };
		/**
		 * 从MediaStore.Video.Media查询中获得的列的列表。
		 */
		String[] mediaColumns = { MediaStore.Video.Media._ID,
				MediaStore.Video.Media.DATA, MediaStore.Video.Media.TITLE,
				MediaStore.Video.Media.MIME_TYPE };
		/**
		 * 在主查询中将选择所有在MediaStore中表示的视频
		 */
		cursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,
				mediaColumns, null, null, null);
		ArrayList<VideoViewInfo> videoRows = new ArrayList<VideoViewInfo>();
		if (cursor.moveToFirst()) {
			do {
				VideoViewInfo newVVI = new VideoViewInfo();
				/**
				 * 将使用另一个查询为每个视频提取缩略图,而且这些数据块都将存储在VideoViewInfo对象中。
				 */
				int id = cursor.getInt(cursor
						.getColumnIndex(MediaStore.Video.Media._ID));
				Cursor thumbCursor = managedQuery(
						MediaStore.Video.Thumbnails.EXTERNAL_CONTENT_URI,
						thumbColumns, MediaStore.Video.Thumbnails.VIDEO_ID
								+ "=" + id, null, null);
				if (thumbCursor.moveToFirst()) {
					newVVI.thumbPath = thumbCursor.getString(thumbCursor
							.getColumnIndex(MediaStore.Video.Thumbnails.DATA));
				}
				newVVI.filePath = cursor.getString(cursor
						.getColumnIndexOrThrow(MediaStore.Video.Media.DATA));
				newVVI.title = cursor.getString(cursor
						.getColumnIndexOrThrow(MediaStore.Video.Media.TITLE));
				newVVI.mimeType = cursor
						.getString(cursor
								.getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE));

				videoRows.add(newVVI);
			} while (cursor.moveToNext());
		}
		listView.setAdapter(new VideoGalleryAdapter(this, videoRows));
		listView.setOnItemClickListener(this);
	}

	/**
	 * 这个方法将从Cursor对象中提取所需的数据,点击一个item,将创建一个意图,以启动手机设备上默认的媒体播放器来播放该item视频。
	 */
	@Override
	public void onItemClick(AdapterView<?> parent, View view, int position,
			long id) {
		if (cursor.moveToPosition(position)) {
			int fileColumn = cursor
					.getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
			int mimeColumn = cursor
					.getColumnIndexOrThrow(MediaStore.Video.Media.MIME_TYPE);
			String videoFilePath = cursor.getString(fileColumn);
			String mimeType = cursor.getString(mimeColumn);

			Intent intent = new Intent(android.content.Intent.ACTION_VIEW);
			File newFile = new File(videoFilePath);
			intent.setDataAndType(Uri.fromFile(newFile), mimeType);

			startActivity(intent);
		}
	}
}

VideoViewInfo.java:

package com.multimediademo13mediastore;

public class VideoViewInfo {
	String filePath;
	String mimeType;
	String thumbPath;
	String title;
}

VideoGalleryAdapter.java:

package com.multimediademo13mediastore;

import java.util.ArrayList;

import android.content.Context;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
/**
 * ListView适配器
 * @author Administrator
 *
 */
public class VideoGalleryAdapter extends BaseAdapter{
	private Context context;
	private ArrayList<VideoViewInfo> videoRows;
	LayoutInflater inflater;
	public VideoGalleryAdapter(Context context,
			ArrayList<VideoViewInfo> videoRows) {
		this.context = context;
		this.videoRows = videoRows;
		inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
	}

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

	@Override
	public Object getItem(int position) {
		return null;
	}

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

	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		View videoRow = inflater.inflate(R.layout.list_item, null);
		ImageView videoThumb = (ImageView) videoRow.findViewById(R.id.imageView);
		if (videoRows.get(position).thumbPath != null) {
			videoThumb.setImageURI(Uri.parse(videoRows.get(position).thumbPath));
		}
		TextView videoTitle = (TextView) videoRow.findViewById(R.id.textView);
		videoTitle.setText(videoRows.get(position).title);
		return videoRow;
	}

}

源码下载:

点击下载源码

Android MediaStore检索视频并播放

时间: 2024-10-08 13:16:00

Android MediaStore检索视频并播放的相关文章

Android 实现视频录制播放

实现类似微信的小视频功能,可以录制一个视频然后播放该视频. 视频录制,使用一个自定义控件. <span style="font-size:14px;">/** * 视频录制控件 * * @author lip * * @date 2015-3-16 */ public class MovieRecorderView extends LinearLayout implements OnErrorListener { private SurfaceView mSurfaceVi

android 视频播放问题,无法播放该视频?

============问题描述============ 不管是调用系统播放器还是其他播放器都提示,无法播放该视频? 播放raw文件夹中的视频 Intent intentViedo = new Intent(Intent.ACTION_VIEW); File file = new File("android.resource://" + getActivity().getPackageName() + "/" + R.raw.ps_ps); Uri uri = Ur

Android开发之使用VideoView播放视频

Android提供了 VideoView组件.它的作用与ImageView类似,仅仅是ImageView用于显示图片.而VideoView用于播放视频. 使用VideoView播放视频的过程例如以下: 1)        在界面布局文件里定义VideoView组件,或在程序中创建VideoView组件. 2)        调用VideoView的例如以下两个方法来载入指定视频. setVideoPath(String path):载入 path 文件所代表的视频. setVideoURI(Ur

Android SurfaceView + MediaPlayer实现分段视频无缝播放

Android当中实现视频播放的方式有两种,即:通过VideoView实现或者通过SurfaceView + MediaPlayer实现. 由浅至深,首先来看下想要在Android上播放一段视频,我们应当怎么做. 前面我们已经提到了两种方式,这里我们来看一下具有更好的拓展性的第二种方式,也就是通过SurfaceView + MediaPlayer进行实现. 首先,我们来定义一个布局文件如下,为了方便起见,我们仅仅只在该布局中定义了一个SurfaceView: <?xml version="

Android中三种视频的播放

在Android中,我们有三种方式来实现视频的播放: 1.使用其自带的播放器.指定Action为ACTION_VIEW,Data为Uri,Type为其MIME类型. 2.使用VideoView来播放.在布局文件中使用VideoView结合MediaController来实现对其控制. 3.使用MediaPlayer类和SurfaceView来实现,这种方式很灵活. 1.调用其自带的播放器: Uri uri = Uri.parse(Environment.getExternalStorageDir

Android酷炫欢迎页播放视频,仿蚂蜂窝自由行和慕课网

转载请注明出处:http://blog.csdn.net/linglongxin24/article/details/53115253 本文出自[DylanAndroid的博客] Android酷炫欢迎页播放视频,仿蚂蜂窝自由行和慕课网 今天无意间看到了蚂蜂窝自由行的app,启动页很酷炫.我记得以前慕课网有个版本的app欢迎页也是播放视频的.今天就顺手写一个,代码比较简单,高手请略过. 先看效果图: 一.资源准备 三个比较短小的视频:视频下载 二.开始编写代码 1.在项目的res下新建一个raw

Android在滚动列表中实现视频的播放 ListView RecyclerView

英文原文:Implementing video playback in a scrolled list (ListView & RecyclerView) 本文将讲解如何在列表中实现视频播放.类似于诸如 Facebook, Instagram 或者 Magisto这些热门应用的效果: Facebook: Magisto: Instagram: 这片文章基于开源项目: VideoPlayerManager. 所有的代码和示例都在那里.本文将跳过许多东西.因此如果你要真正理解它是如何工作的,最好下载

Android短视频滑动播放(一)

本文主要介绍采用RecyclerView配合PagerSnapHelper实现短视频滑动播放内容. 1. 主页内容构建 主页布局文件定义RecyclerView,为RecyclerView建立对应适配器. <androidx.recyclerview.widget.RecyclerView android:id="@+id/rv_little_video" android:layout_width="match_parent" android:layout_h

Android多媒体框架对音乐播放器的支持

下面介绍一下Andriod多媒体框架对开发者提供的支持有哪些. 1. MediaScannerReceiver 这个广播接收者在接收到ACTION_BOOT_COMPLETED.ACTION_MEDIA_MOUNTED或 ACTION_MEDIA_SCANNER_SCAN_FILE 广播时对SD卡中的图片.音乐和视频文件进行了扫描,因为扫描不能影响用户使用,这里启动了一个服务MediaScannerService,扫描的文件类型如下: /* Audio */ addFileType("MP3&q