2016-06-03 2 views
0

Я пытаюсь извлечь все mp3-файлы из внутреннего хранилища и перечислить их в списке в моей деятельности. Я знаю, что есть другие связанные вопросы, подобные этому, но я не могу понять.
Мне нужен правильный код, который извлекает файлы, а также перечисляет их.
Спасибо.Android -Личные mp3-файлы в виде списка из внутреннего хранилища

Редактировать

public class MainScreenActivity extends AppCompatActivity { 
    private List<String> songslist = new ArrayList<String>(); 
    ListView songslistview = (ListView) findViewById(R.id.song_list); 

    @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.main_screen); 
      Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar); 
      setSupportActionBar(toolbar); 
      getallmp3(); 



     } 

    public void getallmp3(){ 
     File dir=Environment.getExternalStorageDirectory(); 
     String pattern=".mp3"; 
     File listfile[]=dir.listFiles(); 
     if(listfile!=null) { 
      for(File file:dir.listFiles()) { 
       if(file.getName().endsWith(pattern)){ 
        songslist.add(file.getName()); 
       } 
      } 
      ArrayAdapter<String> adapter=new ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,songslist); 
      songslistview.setAdapter(adapter); 
     } 
    } 
} 
+0

Возможный дубликат из [Как получить доступ ко всем mp3-файлам из всех подпапок в SD-карте?] (http://stackoverflow.com/questions/17210519/how-to-access-all-mp3-files-from-all-the-subfolders- in-the-sdcard) – darwin

+0

Я предлагаю разбивать вашу проблему на более мелкие части. 1) Как создать список с «фиктивными» элементами. 2) Как получить доступ к mp3-файлам из внутреннего хранилища. Тогда как поставить 1 и 2 вместе? Я не думаю, что кто-то собирается написать программу для вас ... но я могу сказать, что вам, вероятно, понадобится List , который помещается в адаптер, связанный с listview. Затем вам нужно выяснить, как добавить файлы MP3 в этот список. Я бы предложил что-то вроде проверки канала YouTube «slidenerd» и поискать видео в списках просмотров. –

+0

Я отредактировал вопрос. Можете ли вы проверить, что не так с кодом? Все еще немного смущен. Приложение терпит крах. – Kyle

ответ

0

Это моя AsyncTask

class loadSongs extends AsyncTask<String, Void, ArrayList<HashMap<String, String>>> { 


     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      progressBar.setVisibility(View.VISIBLE); 

     } 

     @Override 
     protected void onPostExecute(ArrayList<HashMap<String, String>> hashMaps) { 
      super.onPostExecute(hashMaps); 
      songList1 = hashMaps; 
      progressBar.setVisibility(View.GONE); 
     } 

     @Override 
     protected ArrayList<HashMap<String, String>> doInBackground(String... params) { 

      listdir(Environment.getExternalStorageDirectory()); 

      return null; 
     } 

     public ArrayList<HashMap<String, String>> getPlayList(String rootPath) { 
      ArrayList<HashMap<String, String>> fileList = new ArrayList<>(); 


      try { 
       File rootFolder = new File(rootPath); 
       File[] files = rootFolder.listFiles(); //here you will get NPE if directory doesn't contains any file,handle it like this. 
       for (File file : files) { 
        if (file.isDirectory()) { 
         if (getPlayList(file.getAbsolutePath()) != null) { 
          fileList.addAll(getPlayList(file.getAbsolutePath())); 
         } else { 
          break; 
         } 
        } else if (file.getName().endsWith(".mp3")) { 
         HashMap<String, String> song = new HashMap<>(); 
         Log.d("file path", "" + file.getAbsolutePath()); 
         song.put("file_path", file.getAbsolutePath()); 
         Log.d("file name playlist", "" + file.getName()); 
         song.put("file_name", file.getName()); 
         fileList.add(song); 
        } 
       } 
       return fileList; 
      } catch (Exception e) { 
       return null; 
      } 
     } 

    } 

} 

выполнить Aysnck в вас классе

new loadSongs().execute(); 

Вот метод listdir

public void listdir(File dir) { 
     String msqPattern = ".mp3";// Can include more strings for more extensions and check it. 

     File[] listFile = dir.listFiles(); 

     if (listFile != null) { 
      for (int i = 0; i < listFile.length; i++) { 

       if (listFile[i].isDirectory()) { 
        listdir(listFile[i]); 
       } else { 
        if (listFile[i].getName().endsWith(msqPattern)) { 
         Music_File_Name.add(listFile[i].getName()); 
         Music_File_Path.add(listFile[i].getAbsolutePath()); 

        } 
       } 
      } 
     } 

    } 

Вот адаптер класса

public class DeafaultMusic_Adapter extends BaseAdapter { 
    LayoutInflater layoutInflater; 
    ArrayList<String> list, path; 
    Context context; 
    MediaPlayer mpintro; 

    public DeafaultMusic_Adapter(Context context, ArrayList<String> list, ArrayList<String> path) { 
     this.context = context; 
     this.path = path; 
     this.list = list; 

    } 

    @Override 
    public int getCount() { 
     return list.size(); 
    } 

    @Override 
    public String getItem(int position) { 
     return list.get(position); 
    } 

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

    @Override 
    public View getView(final int position, View convertView, ViewGroup parent) { 
     layoutInflater = LayoutInflater.from(context); 
     convertView = layoutInflater.inflate(R.layout.music_list, parent, false); 
     TextView title = (TextView) convertView.findViewById(R.id.songTitle); 
     TextView album = (TextView) convertView.findViewById(R.id.songAlbum); 
     ImageView icon = (ImageView) convertView.findViewById(R.id.icon); 

     title.setText(list.get(position)); 

     icon.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(Model.mediaPlayer.isPlaying()) 
       { 
        Model.mediaPlayer.stop(); 
        Model.mediaPlayer=MediaPlayer.create(context,Uri.parse(path.get(position))); 
        Model.mediaPlayer.start(); 


       } 
       else { 
        Model.mediaPlayer=MediaPlayer.create(context,Uri.parse(path.get(position))); 


        Model.mediaPlayer.start(); 
       } 

      } 
     }); 


     return convertView; 
    } 


} 

я использовал GridView вместо ListView, как этот

DeafaultMusic_Adapter adapter = new DeafaultMusic_Adapter(c, Music_File_Name, Music_File_Path); 
     Log.d("music file name", "" + Music_File_Name); 
     gridView.setAdapter(adapter); 
     gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { 
      @Override 
      public void onItemClick(AdapterView<?> parent, View view, int position, long id) { 
       Intent i = new Intent(c, CropMusic.class); 
       i.putExtra("musicPath", "" + Music_File_Path.get(position)); 
       i.putExtra("musicName", "" + Music_File_Name.get(position)); 
       startActivity(i); 
       activity.overridePendingTransition(R.anim.activity_in,R.anim.activity_out); 

      } 
     }); 

на музыку нажмите я передаю музыку путь к следующему acticity и воспроизвести его в музыкальный проигрыватель

Вы можете воспроизводить музыку из списка, например,

icon.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 

       if(Model.mediaPlayer.isPlaying()) 
       { 
        Model.mediaPlayer.stop(); 
        Model.mediaPlayer=MediaPlayer.create(context,Uri.parse(path.get(position))); 
        Model.mediaPlayer.start(); 


       } 
       else { 
        Model.mediaPlayer=MediaPlayer.create(context,Uri.parse(path.get(position))); 

//    mpintro.setLooping(true); 
        Model.mediaPlayer.start(); 
       } 

      } 
     }); 

здесь значок мой imageveiw с игры значок

в этом методе я глобально определить MusicPlayer oblject таким образом мы можем сбросить его, когда следующая музыка выбрать

public class Model 
{ 
public static MediaPlayer mediaPlayer = new MediaPlayer(); 

} 

комментарий ниже, если любой запрос

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