Android MediaStore檢索視頻並播放

來源:互聯網
上載者:User

標籤: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;}}

源碼下載:

點擊下載源碼


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.