2011-04-27 23 views
7

Me gustaría crear un botón que al hacer clic vaya a una clase que muestra todos los archivos multimedia desde una tarjeta SD usando un ListView.¿Cómo mostrar archivos en la tarjeta SD en un ListView?

Después de seleccionar de la lista, se devolverá el nombre del archivo seleccionado a la clase principal. SI el archivo devuelto es un archivo de imagen, se mostrará en un ImageView y si el archivo devuelto es un archivo de audio, solo mostrará un ícono.

+9

¿Qué has hecho hasta ahora? Stack Overflow no es un _I-have-a-problem-provide-code_-site. Nos muestras lo que has hecho y te decimos qué está mal. –

+0

Por favor marque esta respuesta como una ref http://stackoverflow.com/questions/11285288/android-mediastore-get-distinct-folders-of-music-files/28473755#28473755 –

Respuesta

1
File mfile=new File("/sdcard"); 
File[] list=mfile.listFiles(); 

System.out.println("list"+mfile.listFiles().length); 
for(int i=0;i<mfile.listFiles().length;i++) 
{ 
    if(list[i].isHidden()) 
    } 
     System.out.println("hidden path files.."+list[i].getAbsolutePath()); 
    } 
} 

puede ayudar esto !!!

+0

muchas gracias. Voy a probar este. :) – Jethro

+0

pero estoy tratando de mostrarlo en un ListView? ¿Es posible con tu código? – Jethro

+2

ya, pero u hav para crear tu lógica –

2

Primero sugiero que lea algunos tutoriales sobre Android primero para que pueda obtener los conceptos básicos. Usted tiene que poner en práctica lo siguiente para hacer la lista

  1. todos los archivos multimedia - How to list all media in Android?
  2. Start new Activity
  3. Android: Capturing the return of an activity
+0

Aprecio tu respuesta hombre. Ya aprendí algunos conceptos básicos, pero estoy teniendo dificultades para lidiar con los archivos (visualización) y mostrarlos en un ListView. – Jethro

+0

Ok :). SO para resolver esta lectura 1. Usted tiene que usar MediaStore para consultar todos los archivos que devolverá Cursor. Debe ajustar el cursor en SimpleCursorAdapter y establecer este adaptador en ListView. –

8

añadir un método GetFiles() a su programa. Llámalo para obtener un ArrayList<> de todos los archivos. A continuación, puede usarlo para completar su listview. Debe proporcionar el argumento String DirectoryPath.

La Función:

public ArrayList<String> GetFiles(String DirectoryPath) { 
    ArrayList<String> MyFiles = new ArrayList<String>(); 
    File f = new File(DirectoryPath); 

    f.mkdirs(); 
    File[] files = f.listFiles(); 
    if (files.length == 0) 
     return null; 
    else { 
     for (int i=0; i<files.length; i++) 
      MyFiles.add(files[i].getName()); 
    } 

    return MyFiles; 
} 

uso Ejemplo:

@Override 
public void onCreate() { 
// Other Code 

    ListView lv; 
    ArrayList<String> FilesInFolder = GetFiles("/sdcard/somefolder"); 
    lv = (ListView)findViewById(R.id.filelist); 

    lv.setAdapter(new ArrayAdapter<String>(this, 
     android.R.layout.simple_list_item_1, FilesInFolder)); 

    lv.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) { 
      // Clicking on items 
     } 
    }); 
} 

Asegúrese de que el almacenamiento externo se puede leer:http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

para filtrar los archivos basado en Nombre/Extensión:How to acces sdcard and return and array with files off a specific format?

+0

¿A qué se refiere 'android.R.layout.simple_list_item_1'? – Si8

+1

Esto es solo un ejemplo, pero si tiene curiosidad, utilicé un subdispositivo 'simple_list_item_1' para cada elemento de lista en mi lista de archivos 'listview'" – Sheharyar

+0

Puede proporcionar alguna sugerencia para esta pregunta: http: // stackoverflow. com/questions/18045035/use-customadapter-to-change-how-listview-is-displayed – Si8

0

función Actualización :: usar esto para nuevas API

función de llamada como esta:

searchForFileInExternalStorage("filename.ext"); 

@implementation

public File searchForFileInExternalStorage(String filename) { 
      File storage = Environment.getExternalStorageDirectory(); 

      return searchForFileInFolder(filename, storage); 
     } 

     public File searchForFileInFolder(String filename, File folder) { 
      File[] children = folder.listFiles(); 
      File result; 

      for (File child : children) { 
       if (child.isDirectory()) { 
        result = searchForFileInFolder(filename, child); 
        if (result != null) { 
         return result; 
        } 
       } else { 
        // replace equals by equalsIgnoreCase if you want to ignore the 
        // case of the file name 
        if (child.getName().equals(filename)) { 
         return child; 
        } 
       } 
      } 

      return null; 
     } 
1
public class FileActivity extends ListActivity { 
String str; 
ArrayList<String> al; 
ArrayAdapter<String> adapter; 
ListView lv; 

@SuppressLint("SdCardPath") 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.file_view); 
    Intent int1=getIntent(); 
    ArrayList<String> arr1=GetFiles(Environment.getExternalStorageDirectory().getPath()); 
    adapter= new ArrayAdapter<String>(getApplicationContext(), 
          android.R.layout.simple_expandable_list_item_1,arr1); 
    lv = (ListView) findViewById(android.R.id.list); 
    lv.setAdapter(adapter); 
} 
private ArrayList<String> GetFiles(String path) { 
    ArrayList<String> arr2=new ArrayList<String>(); 
    File file=new File(path); 
    File[] allfiles=file.listFiles(); 
    if(allfiles.length==0) { 
     return null; 
    } 
    else { 
     for(int i=0;i<allfiles.length;i++) { 
      arr2.add(allfiles[i].getName()); 
     } 
    } 
return arr2; 
    } 


@Override 
protected void onListItemClick(ListView l, View v, int position, long id) { 
    // TODO Auto-generated method stub 
    super.onListItemClick(l, v, position, id); 
    } 
0

¡esta es la solución correcta para usted! o te doy un link por estas cosas!

public class SongsManager { 
// SDCard Path 
//choose your path for me i choose sdcard 
final String MEDIA_PATH = new String("/sdcard/"); 
private ArrayList<hashmap<string, string="">> songsList = new ArrayList<hashmap<string, string="">>(); 

// Constructor 
public SongsManager(){ 

} 

/** 
* Function to read all mp3 files from sdcard 
* and store the details in ArrayList 
* */ 
public ArrayList<hashmap<string, string="">> getPlayList(){ 
    File home = new File(MEDIA_PATH); 

    if (home.listFiles(new FileExtensionFilter()).length > 0) { 
     for (File file : home.listFiles(new FileExtensionFilter())) { 
      HashMap<string, string=""> song = new HashMap<string, string="">(); 
      song.put("songTitle", file.getName().substring(0, (file.getName().length() - 4))); 
      song.put("songPath", file.getPath()); 

      // Adding each song to SongList 
      songsList.add(song); 
     } 
    } 
    // return songs list array 
    return songsList; 
} 

/** 
* Class to filter files which are having .mp3 extension 
* */ 
//you can choose the filter for me i put .mp3 
class FileExtensionFilter implements FilenameFilter { 
    public boolean accept(File dir, String name) { 
     return (name.endsWith(".mp3") || name.endsWith(".MP3")); 
    } 
} 
} 
Cuestiones relacionadas