2016-06-03 12 views
0

Ich habe versucht, alle mp3-Dateien aus dem internen Speicher zu holen und liste sie in einer Listview in meiner Aktivität. Ich weiß, es gibt andere verwandte Fragen wie diese, aber ich kann das nicht verstehen.
Ich brauche einen richtigen Code, der die Dateien abruft und auch auflistet.
Danke.Android -Listing mp3-Dateien in Listview aus dem internen Speicher

bearbeiten

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

Mögliche doppelte wählen von [Wie Zugriff auf alle MP3-Dateien aus allen Unterordnern in der SD-Karte?] (http://stackoverflow.com/questions/17210519/how-to-access-all-mp3-files-from-all-the-subfolders- In-der-SD-Karte) – darwin

+0

Ich würde vorschlagen, Ihr Problem in kleinere Teile zu brechen. 1) Wie man eine Listenansicht mit "Dummy" -Elementen erstellt. 2) Wie man auf mp3 Dateien vom internen Speicher zugreift. Wie setzt man dann 1 und 2 zusammen? Ich glaube nicht, dass jemand das Programm für Sie schreiben wird ... aber ich kann sagen, dass Sie wahrscheinlich eine List benötigen, die in einen Adapter eingefügt wird, der mit einer Listview verknüpft ist. Dann müssen Sie herausfinden, wie Sie MP3-Dateien zu dieser Liste hinzufügen. Ich würde vorschlagen, dass du dir den YouTube-Kanal "gleiten" anschaust und nach Videos auf Listenansichten suchst. –

+0

Ich habe die Frage bearbeitet. Können Sie nachsehen, was mit dem Code nicht stimmt? Immer noch ein wenig verwirrt. Die Anwendung stürzt ab. – Kyle

Antwort

0

Dies ist mein 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; 
      } 
     } 

    } 

} 

ausführen Aysnck in Ihnen Klasse

new loadSongs().execute(); 

Hier Methode 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()); 

        } 
       } 
      } 
     } 

    } 

Hier Adapter Class

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


} 

i gridview statt Listview wie diese

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

      } 
     }); 

auf Musik verwendet haben, klicken Sie auf i Musik Weg zum nächsten acticity bin vorbei und es um Musik-Player

spielen

können Sie eine Musik von listview wie diese

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

      } 
     }); 

hier ist Symbol mein imageveiw mit Play-Symbol

in diesem Verfahren i global definieren haben Musikplayer oblject so können wir es zurück, wenn neben Musik

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

} 

Kommentar unten, wenn eine Abfrage

Verwandte Themen