博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android MediaStore检索视频并播放
阅读量:4036 次
发布时间:2019-05-24

本文共 5410 字,大约阅读时间需要 18 分钟。

布局文件:

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;
   }
}

转载地址:http://oyjdi.baihongyu.com/

你可能感兴趣的文章
openstack网络总结
查看>>
excel 查找一个表的数据在另一个表中是否存在
查看>>
centos 7 上配置dnsmasq 同时支持ipv4和ipv6的DHCP服务
查看>>
AsyncTask、View.post(Runnable)、ViewTreeObserver三种方式总结frame animation自动启动
查看>>
Android中AsyncTask的简单用法
查看>>
S3C6410启动模式介绍
查看>>
S3C2440 USB 设备控制器(转)
查看>>
Linux usb 设备驱动 (1)
查看>>
解决跨网场景下,CAS重定向无法登录的问题(无需修改现有代码)
查看>>
java反编译命令
查看>>
activemq依赖包获取
查看>>
概念区别
查看>>
关于静态块、静态属性、构造块、构造方法的执行顺序
查看>>
final 的作用
查看>>
在Idea中使用Eclipse编译器
查看>>
idea讲web项目部署到tomcat,热部署
查看>>
JMeter 保持sessionId
查看>>
IDEA Properties中文unicode转码问题
查看>>
Idea下安装Lombok插件
查看>>
zookeeper
查看>>