Android MediaStore检索视频并播放

布局文件:

activity_main.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="match_parent">
 
    <listview android:id="@+id/listView" 
        android:layout_width="match_parent" 
        android:layout_height="wrap_content">
    </listview>
 
</relativelayout>


list_item.xml

<?xml version="1.0" encoding="utf-8"?>
<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">
 
</textview></imageview></linearlayout>

Activity类

package com.zh_weir.videoplayer;


import android.annotation.SuppressLint;
import android.app.Activity;
import android.widget.AdapterView.OnItemClickListener;
import java.io.File;
import java.util.ArrayList;
import com.zh_weir.videoplayer.VideoGalleryAdapter.videoviewinfo;
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.ListView;


public class MainActivity extends Activity implements OnItemClickListener{

 private ListView listView;
   private Cursor cursor;
 
   @SuppressLint("NewApi")
@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);
       }
   } 
}


package com.zh_weir.videoplayer;

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;




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;
   }
 
   
  static class videoviewinfo{
    String filePath;
       String mimeType;
       String thumbPath;
       String title;
   }



}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值