2013-11-15 3 views
4

Как получить список видеофайлов, хранящихся в определенной папке с помощью медиастара? в настоящее время я использую этот кодКак получить список видеофайлов в определенной папке в android?

package com.example.videolisttest; 

import android.app.Activity; 
import android.content.Context; 
import android.database.Cursor; 
import android.os.Bundle; 
import android.provider.MediaStore; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.AdapterView; 
import android.widget.BaseAdapter; 
import android.widget.ListView; 
import android.widget.TextView; 
import android.widget.AdapterView.OnItemClickListener; 
import android.widget.Toast; 

public class MainActivity extends Activity { 
    private Cursor videocursor; 
    private int video_column_index; 
    ListView videolist; 
    int count; 

    /** Called when the activity is first created. */ 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     init_phone_video_grid(); 
    } 

    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.PhoneVideoList); 
     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);*/ 
      Toast.makeText(getApplicationContext(), filename, Toast.LENGTH_SHORT).show(); 
     } 
    }; 

    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(); 
      TextView tv = new TextView(vContext.getApplicationContext()); 
      String id = null; 
      if (convertView == null) { 
       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); 
       tv.setText(id); 
      } else 
       tv = (TextView) convertView; 
      return tv; 
     } 
    } 
}  

Но этот метод просматривает всю SD-карту. Я хочу сканировать определенную папку. Я не хочу использовать метод filefilter. пожалуйста, поделитесь любым методом с помощью медиастара.

ответ

10

вы можете использовать этот код для получения видео из определенной папки, как:

String selection=MediaStore.Video.Media.DATA +" like?"; 
      String[] selectionArgs=new String[]{"%FolderName%"}; 
      videocursor = managedQuery(MediaStore.Video.Media.EXTERNAL_CONTENT_URI, 
        parameters, selection, selectionArgs, MediaStore.Video.Media.DATE_TAKEN + " DESC"); 

Его работы для меня, как очарование.

+0

Это прекрасно работает. Бро, не могли бы вы объяснить эти строки: «как?»; , параметры, «DESC» и знак «%» –

+2

String [] parameters = {MediaStore.Video.Media._ID} и т. п. - это инструкция для sql, где вы можете указать местоположение для данных мультимедиа. Desc для недавнего первого показа в список. –

+0

Но мы не можем доверять этому, потому что это поисковый механизм. Если у вас есть два каталога с почти одинаковым именем, он объединит результаты. –

1

Если вы знаете определенную папку, используйте:

.getExternalFilesDir 
2
private List<String> path_vid; 
public void searchVid(File dir) { 
    String pattern = ".mp4"; 
      //Get the listfile of that flder 
    final File listFile[] = dir.listFiles(); 

    if (listFile != null) { 
     for (int i = 0; i < listFile.length; i++) { 
      final int x = i; 
      if (listFile[i].isDirectory()) { 
       walkdir(listFile[i]); 
      } else { 
       if (listFile[i].getName().endsWith(pattern)) { 
        // Do what ever u want, add the path of the video to the list 
         path_vid.add(listFile[i]); 
       } 
      } 
     } 
    } 
} 

Эта функция является рекурсивной, и поиск порно- настройки его в списке, то Vids ищутся из especified папки, если и хотят поиск Vids в SDCard в, использование:

File sdCard = new File(Environment.getExternalStorageDirectory().getAbsolutePath()); 
//For example: 
//File vidsFolder= new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/Videos"); 
searchVid(sdCard); 
if(path_vid.size()>0){ 
    //Convert list into array 
    String[] array = path_vid.toArray(new String[path_vid.size()]); 
    //Create Adapter 
    ArrayAdapter<String> adapter =new ArrayAdapter<String>(this,android.R.layout.simple_list_item, array); 
    //Set adapter to videlist 
    videolist.setAdapter(adapter); 
}else{ 
    //No vids found 
    exit(); 
} 
+0

Благодарим вас за ответ, но мой вопрос заключается в том, как это сделать с помощью Mediastore ?? –

+0

Этот ответ может помочь вам: http://stackoverflow.com/questions/10503840/how-to-get-all-videos-on-android-device –

Смежные вопросы