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
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
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. –
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