it-swarm.com.de

Listen Sie alle Musik in MediaStore mit den PATHs auf

Ok, also arbeite ich seit ein paar Tagen an diesem Projekt und die meiste Zeit habe ich herausgefunden, wie ich die gesamte Musik auf einem Gerät in einer Listenansicht oder etwas anderem auflisten kann, was ich seit einigen Tagen gesucht habe das bringt mich um. Ich war an einem Punkt so nah dran, dass die gesamte Musik in einem Ordner angezeigt wurde. Da die meisten Leute Unterordner für Dinge wie Artiest und Alben haben, brauche ich eine Möglichkeit, Unterordner nach MP3s oder Musikdateien zu durchsuchen.

Folgendes habe ich bisher für die Musiksammlung: 

package com.androidhive.musicplayer;

import Java.io.File;
import Java.io.FilenameFilter;
import Java.util.ArrayList;
import Java.util.HashMap;

import Android.provider.MediaStore;

public class SongsManager {
// SDCard Path
final String MEDIA_PATH = new String(MediaStore.Audio.Media.getContentUri("external").toString());
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
 * */
class FileExtensionFilter implements FilenameFilter {
    public boolean accept(File dir, String name) {
        return (name.endsWith(".mp3") || name.endsWith(".MP3"));
    }
}

}

Danke an alle, die helfen können. :)

29
user1853951

Obwohl der Beitrag alt ist und ich für andere Leute die Idee habe, eine Liste mit Musik mit ihrem Dateipfad zu erstellen, habe ich die Lösung hier hinzugefügt. Die MediaStore.Audio.Media.DATA-Spalte enthält den Mediendateipfad. Sie können die erforderlichen Informationen erhalten, indem Sie das folgende Snippet verwenden:

ContentResolver cr = getActivity().getContentResolver();

Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
String selection = MediaStore.Audio.Media.IS_MUSIC + "!= 0";
String sortOrder = MediaStore.Audio.Media.TITLE + " ASC";
Cursor cur = cr.query(uri, null, selection, null, sortOrder);
int count = 0;

if(cur != null)
{
    count = cur.getCount();

    if(count > 0)
    {
        while(cur.moveToNext())
        {
            String data = cur.getString(cur.getColumnIndex(MediaStore.Audio.Media.DATA));
            // Add code to get more column here

            // Save to your list here
        }

    }
}

cur.close();
29
MARK002-MAB

Sie können alle Musikdateien mit diesem Code auflisten.

//Some audio may be explicitly marked as not being music
String selection = MediaStore.Audio.Media.IS_MUSIC + " != 0";

String[] projection = {
        MediaStore.Audio.Media._ID,
        MediaStore.Audio.Media.ARTIST,
        MediaStore.Audio.Media.TITLE,
        MediaStore.Audio.Media.DATA,
        MediaStore.Audio.Media.DISPLAY_NAME,
        MediaStore.Audio.Media.DURATION
};

cursor = this.managedQuery(
        MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
        projection,
        selection,
        null,
        null);

private List<String> songs = new ArrayList<String>();
while(cursor.moveToNext()) {
        songs.add(cursor.getString(0) + "||" 
                    + cursor.getString(1) + "||" 
                    + cursor.getString(2) + "||"
                    + cursor.getString(3) + "||"
                    + cursor.getString(4) + "||" 
                    + cursor.getString(5));
}

Ich habe diesen Code nicht ausprobiert, aber er scheint richtig zu sein. Damit bist du auf dem richtigen Weg.

20

Ich arbeite gerade an demselben Projekt und habe das Problem bereits gelöst.

Sie benötigen eine benutzerdefinierte Klasse, um Ihre Songdaten zu speichern:

package YOUR_PACKAGE;

public class Songs
{
    private long mSongID;
    private String mSongTitle;

    public Songs(long id, String title){
        mSongID = id;
        mSongTitle = title;
    }

    public long getSongID(){
        return mSongID;
    }

    public String getSongTitle(){
        return mSongTitle;
    }
}

Dann müssen Sie ArrayList in Aktivität mit der Listenansicht definieren, die Sie mit Daten füllen werden:

private ArrayList<Songs> arrayList;

und in onCreate:

arrayList = new ArrayList<Songs>();

Dann müssen Sie Daten von Ihrem Gerät abrufen:

public void YOUR_METHOD_NAME(){
    ContentResolver contentResolver = getContentResolver();
    Uri songUri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
    Cursor songCursor = contentResolver.query(songUri, null, null, null, null);

    if(songCursor != null && songCursor.moveToFirst())
    {
        int songId = songCursor.getColumnIndex(MediaStore.Audio.Media._ID);
        int songTitle = songCursor.getColumnIndex(MediaStore.Audio.Media.TITLE);

        do {
            long currentId = songCursor.getLong(songId);
            String currentTitle = songCursor.getString(songTitle);
            arrayList.add(new Songs(currentId, currentTitle, currentArtist));
        } while(songCursor.moveToNext());
    }
}

Dann rufen Sie diese Methode von onCreate auf:

YOUR_METHOD_NAME();

Schließlich müssen Sie eine benutzerdefinierte Adapterklasse erstellen, diesen Adapter in onCreate definieren (in Aktivität mit ListView) und diesen Adapter für Ihr ListView-Objekt festlegen.

Ich sehe, dass es vor 3 Jahren gefragt wurde und das Problem, das ich denke, bereits gelöst wurde, aber vielleicht wird es für jemanden nützlich sein. Vielen Dank.

2
Levan Voronin

Hier ist eine einfache Funktion, die Ihnen alle Audiodateien in File Object gibt.

 public static List<File> getAllAudios(Context c) {
    List<File> files = new ArrayList<>();
    String[] projection = { MediaStore.Audio.AudioColumns.DATA ,MediaStore.Audio.Media.DISPLAY_NAME};
    Cursor cursor = c.getContentResolver().query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, projection, null, null, null);
    try {
        cursor.moveToFirst();
        do{
            files.add((new File(cursor.getString(cursor.getColumnIndexOrThrow(MediaStore.Audio.Media.DATA)))));
        }while(cursor.moveToNext());

        cursor.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return files;
}
0
Bilal Mustafa