標籤: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")@Overrideprotected 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視頻。 */@Overridepublic 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);}@Overridepublic int getCount() {return videoRows.size();}@Overridepublic Object getItem(int position) {return null;}@Overridepublic long getItemId(int position) {return 0;}@Overridepublic 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;}}
源碼下載:
點擊下載源碼