显示specfic文件夹中的视频缩略图与Android的列表视图 [英] Display specfic folder videos in a listview with Thumbnails android

查看:440
本文介绍了显示specfic文件夹中的视频缩略图与Android的列表视图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我试图从SD卡的文件夹XYZ列表视图来显示视频文件,我已经成功地显示,但问题是,它显示存储在SD卡的所有视频文件,甚至开出夹的abc其实我想只存储视频文件在文件夹XYZ来显示。由于有4天,我正在Google上搜寻,但没有找到任何解决方案。我的code是显示所有的视频​​和完美的工作:

 私人光标videocursor;
     私人诠释video_column_index;
     ListView的videolist;
     诠释计数;
     的String [] thumbColumns = NULL;
     文件videoFiles;
    @覆盖
    保护无效的onCreate(捆绑savedInstanceState){
        super.onCreate(savedInstanceState);
        的setContentView(R.layout.activity_main);    init_phone_video_grid();
@燮pressWarnings(德precation)
 私人无效init_phone_video_grid(){
  System.gc()的;
  的String [] = PROJ {MediaStore.Video.Media._ID,
    MediaStore.Video.Media.DATA,
    MediaStore.Video.Media.DISPLAY_NAME,
    MediaStore.Video.Media.SIZE};
  videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI,PROJ,
          NULL,NULL,NULL);
  数= videocursor.getCount();
  videolist =(ListView控件)findViewById(R.id.list);
  videolist.setAdapter(新VideoAdapter(getApplicationContext()));
  videolist.setOnItemClickListener(videogridlistener);
 } 私人OnItemClickListener videogridlistener =新OnItemClickListener(){
  公共无效onItemClick(适配器视图<>母公司,视图V,INT位置,
    长ID){
   System.gc()的;
   video_column_index = videocursor
     .getColumnIndexOrThrow(MediaStore.Video.Media.DATA);
   videocursor.moveToPosition(位置);
   字符串文件名= videocursor.getString(video_column_index);
   意向意图=新意图(MainActivity.this,ViewVideo.class);
   intent.putExtra(videofilename,文件名);
   startActivity(意向);
  }
 };
 公共类VideoAdapter延伸BaseAdapter {
      私人语境vContext;      公共VideoAdapter(上下文C){
       vContext = C;
      }      公众诠释的getCount(){
       返回计数;
      }      公共对象的getItem(INT位置){
       返回的位置;
      }      众长getItemId(INT位置){
       返回的位置;
      }      公共查看getView(INT位置,查看convertView,父母的ViewGroup){
       System.gc()的;
       ViewHolder持有人;
       字符串ID = NULL;
       convertView = NULL;
       如果(convertView == NULL){
        convertView = LayoutInflater.from(vContext).inflate(R.layout.listitem,父母,假);
        持有人=新ViewHolder();
        holder.txtTitle =(TextView中)convertView.findViewById(R.id.txtTitle);
        holder.txtSize =(TextView中)convertView.findViewById(R.id.txtSize);
        holder.thumbImage =(ImageView的)convertView.findViewById(R.id.imgIcon);        video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);
        videocursor.moveToPosition(位置);
        ID = videocursor.getString(video_column_index);
        video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);
        videocursor.moveToPosition(位置);
        // ID + =大小(KB):+ // videocursor.getString(video_column_index);
        holder.txtTitle.setText(ID);
        holder.txtSize.setText(大小(KB):+ videocursor.getString(video_column_index));        的String [] = PROJ {MediaStore.Video.Media._ID,
          MediaStore.Video.Media.DISPLAY_NAME,
          MediaStore.Video.Media.DATA};
        @燮pressWarnings(德precation)        光标光标= managedQuery(
          MediaStore.Video.Media.EXTERNAL_CONTENT_URI,PROJ,
          MediaStore.Video.Media.DISPLAY_NAME +=?,
          新的String [] {ID},NULL);
        cursor.moveToFirst();        长IDS = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media._ID));        ContentResolver的crThumb = getContentResolver();
        BitmapFactory.Options选项=新BitmapFactory.Options();
        options.inSampleSize = 1;
        位图curThumb = MediaStore.Video.Thumbnails.getThumbnail(
          crThumb,IDS,MediaStore.Video.Thumbnails.MICRO_KIND,
          选项​​);
        holder.thumbImage.setImageBitmap(curThumb);
        curThumb = NULL;       }
       返回convertView;
      }
     }     静态类ViewHolder {      TextView的txtTitle;
      TextView的txtSize;
      ImageView的thumbImage;
     }


解决方案

试试这个

 公共静态最后的String [] = VIDEO_PROJECTION {MediaStore.Video.Media._ID,MediaStore.Video.Media.TITLE,
        MediaStore.Video.Media.DATA};公共静态最终乌里VIDEO_SOURCE_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

使用内容解析查询数据

  CursorLoader cursorLoader =新CursorLoader(getActivity(),VIDEO_SOURCE_URI,VIDEO_PROJECTION,MediaStore.Video.Media.DATA +怎么样?,新的String [] {%FOLDER_NAME%} ,
            MediaStore.Video.Media.DATA +COLLATE NOCASE ASC;);

据猎犬从FOLDER_NAME的所有视频文件。因为可以有一个或多个文件夹与名称所以最好是提供绝对路径。

I am trying to display video files in listview from folder 'xyz' on sdcard, i have successfully displayed but problem is that it displays all video files stored on sdcard even out of folder 'abc' actually i want only video files stored in folder 'xyz' to be displayed. I am googling since 4 days but didn't find any solution for that. My code is that is showing all videos and working perfectly :

private Cursor videocursor;  
     private int video_column_index;  
     ListView videolist;  
     int count;  
     String[] thumbColumns = null ;
     File videoFiles;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

    init_phone_video_grid();
@SuppressWarnings("deprecation")  
 private void init_phone_video_grid() {  
  System.gc();  
  String[] proj = { MediaStore.Video.Media._ID,  
    MediaStore.Video.Media.DATA,  
    MediaStore.Video.Media.DISPLAY_NAME,  
    MediaStore.Video.Media.SIZE };  
  videocursor = managedQuery( MediaStore.Video.Media.EXTERNAL_CONTENT_URI,proj, 
          null, null,null);  
  count = videocursor.getCount();  
  videolist = (ListView) findViewById(R.id.list);  
  videolist.setAdapter(new VideoAdapter(getApplicationContext()));  
  videolist.setOnItemClickListener(videogridlistener);  
 }  

 private OnItemClickListener videogridlistener = new OnItemClickListener() {  
  public void onItemClick(AdapterView<?> parent, View v, int position,  
    long id) {  
   System.gc();  
   video_column_index = videocursor  
     .getColumnIndexOrThrow(MediaStore.Video.Media.DATA);  
   videocursor.moveToPosition(position);  
   String filename = videocursor.getString(video_column_index);  
   Intent intent = new Intent(MainActivity.this, ViewVideo.class);  
   intent.putExtra("videofilename", filename);  
   startActivity(intent);  
  }  
 };  


 public class VideoAdapter extends BaseAdapter {  
      private Context vContext;  

      public VideoAdapter(Context c) {  
       vContext = c;  
      }  

      public int getCount() {  
       return count;  
      }  

      public Object getItem(int position) {  
       return position;  
      }  

      public long getItemId(int position) {  
       return position;  
      }  

      public View getView(int position, View convertView, ViewGroup parent) {  
       System.gc();  
       ViewHolder holder;  
       String id = null;  
       convertView = null;  
       if (convertView == null) {  
        convertView = LayoutInflater.from(vContext).inflate(R.layout.listitem, parent, false);  
        holder = new ViewHolder();  
        holder.txtTitle = (TextView) convertView.findViewById(R.id.txtTitle);  
        holder.txtSize = (TextView) convertView.findViewById(R.id.txtSize);  
        holder.thumbImage = (ImageView) convertView.findViewById(R.id.imgIcon);  

        video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.DISPLAY_NAME);  
        videocursor.moveToPosition(position);  
        id = videocursor.getString(video_column_index);  
        video_column_index = videocursor.getColumnIndexOrThrow(MediaStore.Video.Media.SIZE);  
        videocursor.moveToPosition(position);  
        // id += " Size(KB):" +  // videocursor.getString(video_column_index);  
        holder.txtTitle.setText(id);  
        holder.txtSize.setText(" Size(KB):" + videocursor.getString(video_column_index));  

        String[] proj = { MediaStore.Video.Media._ID,  
          MediaStore.Video.Media.DISPLAY_NAME,  
          MediaStore.Video.Media.DATA };  
        @SuppressWarnings("deprecation")  

        Cursor cursor = managedQuery(  
          MediaStore.Video.Media.EXTERNAL_CONTENT_URI, proj,  
          MediaStore.Video.Media.DISPLAY_NAME + "=?",  
          new String[] { id }, null);  
        cursor.moveToFirst();  

        long ids = cursor.getLong(cursor.getColumnIndex(MediaStore.Video.Media._ID));  

        ContentResolver crThumb = getContentResolver();  
        BitmapFactory.Options options = new BitmapFactory.Options();  
        options.inSampleSize = 1;  
        Bitmap curThumb = MediaStore.Video.Thumbnails.getThumbnail(  
          crThumb, ids, MediaStore.Video.Thumbnails.MICRO_KIND,  
          options);  
        holder.thumbImage.setImageBitmap(curThumb);  
        curThumb = null;  

       }
       return convertView;  
      }  
     }  

     static class ViewHolder {  

      TextView txtTitle;  
      TextView txtSize;  
      ImageView thumbImage;  
     }          

解决方案

Try this

public static final String[] VIDEO_PROJECTION = {MediaStore.Video.Media._ID, MediaStore.Video.Media.TITLE,
        MediaStore.Video.Media.DATA};

public static final Uri VIDEO_SOURCE_URI = MediaStore.Video.Media.EXTERNAL_CONTENT_URI;

Querying the data using the content resolver

    CursorLoader cursorLoader = new CursorLoader(getActivity(), VIDEO_SOURCE_URI, VIDEO_PROJECTION, MediaStore.Video.Media.DATA + " like ? ", new String[]{"%FOLDER_NAME%"},
            MediaStore.Video.Media.DATA + " COLLATE NOCASE ASC;");

It retrievers all the video files from the FOLDER_NAME. Since there can be one or more folders with a name so it is better to provide absolute path.

这篇关于显示specfic文件夹中的视频缩略图与Android的列表视图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆