I would like to create a button that when clicked will go to a class that displays all media files from an SD card using a ListView
.
After selecting from the list it will then return the filename selected to the main class. IF the returned file is an image file, it will be displayed in an ImageView
and if the returned file is an audio file, it'll just display an icon.
Add a Method GetFiles()
to your program. Call it to get an ArrayList<>
of all the files. You can then use it to populate your listview
. You need to provide String argument DirectoryPath
.
The Function:
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;
}
Usage Example:
@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
}
});
}
Make sure that the External Storage is Readable: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal
To Filter files based on Name/Extension: How to acces sdcard and return and array with files off a specific format?
First i strongly suggest you read some tutorials about android first so you get the basics. You have to implement the following to do this
- List all media files - How to list all media in Android?
- Start new Activity
- Android: Capturing the return of an activity
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());
}
}
may this would help!!!
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);
}
Updated function:: use this for new apis
call function like this:
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;
}
this is a correct solution for you! or i give you a link for this stuff!
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"));
}
}
}
来源:https://stackoverflow.com/questions/5800981/how-to-display-files-on-the-sd-card-in-a-listview