2011-07-11 94 views
0
public class VideoDemo extends Activity { 
     private VideoView video; 
     private MediaController ctlr; 

     File clip=new File(Environment.getExternalStorageDirectory(); 
     { 

       if (clip.exists()) { 
       video=(VideoView)findViewById(R.id.videoGrdView); 
       video.setVideoPath(clip.getAbsolutePath()); 

       ctlr=new MediaController(this); 
       ctlr.setMediaPlayer(video); 
       video.setMediaController(ctlr); 
       video.requestFocus(); 
       video.start(); 
     } 
    }}; 
} 

}如何播放從SD卡選擇的視頻?

所以我已經得到了我的SD卡上的所有視頻的VideoGrdView在一個單獨的活動來顯示,現在我需要知道如何從電網點擊視頻並將它通過這個播放媒體播放器。任何幫助表示讚賞。

public class Menus extends Activity { 
//set constants for MediaStore to query, and show videos 
private final static Uri MEDIA_EXTERNAL_CONTENT_URI =  
    MediaStore.Video.Media.EXTERNAL_CONTENT_URI; 
private final static String _ID = MediaStore.Video.Media._ID; 
private final static String MEDIA_DATA = MediaStore.Video.Media.DATA; 
//flag for which one is used for images selection 
private GridView _gallery; 
private Cursor _cursor; 
private int _columnIndex; 
private int[] _videosId; 
private Uri _contentUri; 


protected Context _context; 
/** Called when the activity is first created. */ 
@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 

    _context = getApplicationContext(); 
    _gallery = (GridView) findViewById(R.id.videoGrdVw); 
    //set default as external/sdcard uri 
    _contentUri = MEDIA_EXTERNAL_CONTENT_URI; 
    //initialize the videos uri 
    //showToast(_contentUri.getPath()); 
    initVideosId(); 
    //set gallery adapter 
    setGalleryAdapter(); 
} 
private void setGalleryAdapter() { 
    _gallery.setAdapter(new VideoGalleryAdapter(_context)); 
    _gallery.setOnItemClickListener(_itemClickLis); 

} 
private AdapterView.OnItemClickListener _itemClickLis = new OnItemClickListener() 
{ 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) 
    { 
     // Now we want to actually get the data location of the file 
     String [] proj={MEDIA_DATA}; 
     // We request our cursor again 
     _cursor = managedQuery(_contentUri, 
       proj, // Which columns to return 
       null,  // WHERE clause; which rows to return (all rows) 
       null,  // WHERE clause selection arguments (none) 
       null); // Order-by clause (ascending by name) 
     // We want to get the column index for the data uri 
     int count = _cursor.getCount(); 
     // 
     _cursor.moveToFirst(); 
     // 
     _columnIndex = _cursor.getColumnIndex(MEDIA_DATA); 
     // Lets move to the selected item in the cursor 
     _cursor.moveToPosition(position); 
     startActivity(new Intent("com.ave")); 
     } 
}; 
private void initVideosId() { 
    try 
    { 
     //Here we set up a string array of the thumbnail ID column we want to get back 
     String [] proj={_ID}; 
     // Now we create the cursor pointing to the external thumbnail store 
     _cursor = managedQuery(_contentUri, 
       proj, // Which columns to return 
       null,  // WHERE clause; which rows to return (all rows) 
       null,  // WHERE clause selection arguments (none) 
       null); // Order-by clause (ascending by name) 
     int count= _cursor.getCount(); 
     // We now get the column index of the thumbnail id 
     _columnIndex = _cursor.getColumnIndex(_ID); 
     //initialize 
     _videosId = new int[count]; 
     //move position to first element 
     _cursor.moveToFirst();   
     for(int i=0;i<count;i++) 
     {   
      int id = _cursor.getInt(_columnIndex); 
      // 
      _videosId[i]= id; 
      // 
      _cursor.moveToNext(); 
      // 
     } 
    }catch(Exception ex) 
    { 

    } 

} 


// 
private class VideoGalleryAdapter extends BaseAdapter 
{ 
    public VideoGalleryAdapter(Context c) 
    { 
     _context = c; 
    } 
    public int getCount() 
    { 
     return _videosId.length; 
    } 
    public Object getItem(int position) 
    { 
     return position; 
    } 
    public long getItemId(int position) 
    { 
     return position; 
    } 
    public View getView(int position, View convertView, ViewGroup parent) 
    { 
     ImageView imgVw= new ImageView(_context);; 
     try 
     { 
      if(convertView!=null) 
      { 
       imgVw= (ImageView) convertView; 
      } 
      imgVw.setImageBitmap(getImage(_videosId[position])); 
      imgVw.setLayoutParams(new GridView.LayoutParams(96, 96)); 
      imgVw.setPadding(8, 8, 8, 8); 
     } 
     catch(Exception ex) 
     { 
      System.out.println("StartActivity:getView()-135: ex " + ex.getClass() +", "+ ex.getMessage()); 
     } 
     return imgVw; 
    } 

    // Create the thumbnail on the fly 
    private Bitmap getImage(int id) { 
     Bitmap thumb = MediaStore.Video.Thumbnails.getThumbnail(
       getContentResolver(), 
       id, MediaStore.Video.Thumbnails.MICRO_KIND, null); 
     return thumb; 
    } 

} 

}

+0

你真的想用你自己的VideoView嗎?任何具體原因?您可以很好地使用設備上的視頻播放器。 –

+0

是的,我也用我自己的。 – Cataroux

+0

好的,你遇到了什麼問題?詳細的日誌將有助於找出問題。我可以看到你沒有給出文件的完整文件路徑。 –

回答

3

畫廊,相當多的工作方式作爲一個ListView相同。在onItemClick方法中,您應該能夠知道哪個特定項目被點擊。獲取該項目的Uri /絕對路徑,並將該信息傳遞給下一個活動。

在VideoDemo類中,提取此Uri /路徑並將其設置爲VideoView。