Wie am Besten eine temporäre, zufällige Audio Playlist für den MediaPlayer() erzeugen?

  • Hallo,
    für eine eigene Musik-App, die nach einer einzustellender Spieldauer das Abspielen beendet (ich schlafe gern mit Musik ein) fehlt mir unter Anderem noch eine gute Idee, wie ich aus den "zusammengesuchten Daten" (contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,null,null,null,null) der Musikstücke eine temporäre Liste mit den Daten zum Abspielen mit dem MediaPlayer() erzeuge, auf die dann in zufälliger Reihenfolge zugegriffen werden soll, aber so, dass wirklich "kein" Titel 2 mal gespielt wird, ehe nicht alle in Frage kommenden Stücke gespielt wurden.
    Ist es gut eine Liste mit shuffle() zu bearbeiten und dann von oben nach unten abzuspielen, oder sollte man lieber mit Random() arbeiten und dann nach Start der Musikstücks dann den Eintrag aus der Liste zu löschen?


    Erwartungsvolle Grüße, schymura ^^

  • Generell ist es eine sehr gute Idee, fertige Konzepte zu nutzen.
    Wenn es also ein List.shuffle() gibt und dieses verspricht, die Daten zufällig umzusortieren, dann ist List.shuffle() zu nutzen.


    Du kannst ja ein paar Trockenübungen machen um die Funktionalität zu analysieren. ;)


    Falls shuffle() nicht das tut, was es verspricht (ist bei Java ja oft so... +hust+) kannst du es immer noch selber bauen.


    Ich persönlich würde beide Ansätze kombinieren:
    Eine geschüttelte Kopie der Liste erzeugen (dann kann die Playlist als Solche ja weiterhin angezeigt werden), das erste Item abspielen und dann den ersten Listenpunkt löschen.
    So kannst du immer stur das erste Listitem abspielen und brauchst dich um Cursorkrams etc. nur in der Playlist-Ansicht selbst sorgen.

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil,
    danke für deine Antwort.

    Zitat

    Wenn es also ein List.shuffle() gibt und dieses verspricht, die Daten zufällig umzusortieren, dann ist List.shuffle() zu nutzen.

    Gibt es, ich dachte da an

    Code
    Collections.shuffle(DieListe);


    und das geht auch ganz gut, nach mehrmaligen Versuchen ist dann tatsächlich immer einen andere Reihenfolge vorhanden.

    Zitat

    So kannst du immer stur das erste Listitem abspielen und brauchst dich um Cursorkrams etc. nur in der Playlist-Ansicht selbst sorgen.

    Leider muss ich mich wohl doch um den Cursorkrams kümmern, denn die anderen Daten (FieName, Spieldauer, etc.) sind ja über

    Code
    Cursor cursor = contentResolver.query(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,zusuchen,null,null,null);


    in einem Cursor "versteckt".


    Na, vielleicht geht der ja auch irgendwie zu "schütteln".


    Schöne, dankbare Grüße, schymura ^^

  • Kannst du nicht einfach die MediaStore.Audio.Media.EXTERNAL_CONTENT_URI in deine Liste packen?
    Über die URI kommst du doch an all die anderen Daten ran.
    Oder verstehe ich da was falsch?

    Je mehr Käse, desto mehr Löcher.
    Je mehr Löcher, desto weniger Käse.
    Daraus folgt: je mehr Käse, desto weniger Käse.


    »Dies ist ein Forum. Schreibt Eure Fragen in das Forum, nicht per PN!«

  • Hallo Lucas de Vil,

    Zitat

    Kannst du nicht einfach die MediaStore.Audio.Media.EXTERNAL_CONTENT_URI in deine Liste packen?

    Wenn ich versuche eine Liste vom Typ Cursor mit

    Code
    Collections.shuffle(cursor);


    zu mischen, dann weigert sich schon Eclipse......
    Werde wohl mit 2 Listen arbeiten, eine alphabetische geordnete zum Anzeigen und Aussuchen des (eines) Starttitels und dann die andere zum Abspielen.
    Kann ja dann über mehrere Möglichkeiten, etwa

    Code
    mMediaPlayer.setDataSource(getApplicationContext(), contentUri);
    MediaMetadataRetriever mmr = new MediaMetadataRetriever();
    mmr.extractMetadata(MediaMetadataRetriever.METADATA_KEY_GENRE);
    
    
    // oder auch einfach nur über
    Integer.toString(mMediaPlayer.getDuration());


    alle Daten auslesen um sie wähend des Abspielens anzuzeigen und aktualisieren.


    Dankbare Grüße, schymura ^^

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!