Как отобразить файлы на SD-карте в ListView? - PullRequest
6 голосов
/ 27 апреля 2011

Я хотел бы создать кнопку, которая при нажатии перейдет в класс, который отображает все медиа-файлы с SD-карты, используя ListView.

. После выбора из списка он вернет имя файлавыбрал в основной класс.Если возвращенный файл является файлом изображения, он будет отображаться в ImageView, а если возвращенный файл является аудиофайлом, он просто отобразит значок.

Ответы [ 6 ]

7 голосов
/ 25 августа 2012

Добавьте метод GetFiles() в вашу программу. Позвоните, чтобы получить ArrayList<> всех файлов. Затем вы можете использовать его для заполнения вашего listview. Вам необходимо предоставить строковый аргумент DirectoryPath.

Функция:

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;
}

Пример использования:

@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
         }
    });
}

Убедитесь, что внешнее хранилище доступно для чтения: http://developer.android.com/guide/topics/data/data-storage.html#filesExternal

Чтобы отфильтровать файлы по имени / расширению: Как получить доступ к SDCard и возврату и массиву файлов с определенным форматом?

2 голосов
/ 27 апреля 2011

Во-первых, я настоятельно рекомендую вам сначала прочитать некоторые учебники об Android, чтобы вы получили основы. Для этого вам необходимо реализовать следующее

  1. Список всех медиафайлов - Как вывести список всех медиафайлов в Android?
  2. Начать новую деятельность
  3. Android: захват возврата активности
1 голос
/ 07 июля 2013
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);
    }
1 голос
/ 27 апреля 2011
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());
    }
}

может это поможет !!!

0 голосов
/ 01 августа 2015

это правильное решение для вас! или я дам вам ссылку для этого материала!

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"));
    }
}
 }
0 голосов
/ 19 марта 2013

Обновленная функция :: используйте это для новых API

вызовите функцию так:

 searchForFileInExternalStorage("filename.ext");  

@ осуществление

 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;
        }
...