Найдите Путь аудио.Медиа - PullRequest
0 голосов
/ 17 июля 2011

Я пытаюсь сделать пользовательский медиаплеер. В настоящее время я получаю все песни с телефона:

audioCursor = this.managedQuery(Audio.Media.EXTERNAL_CONTENT_URI, null, null, null, Audio.Media.TITLE+" ASC");
        startManagingCursor(audioCursor);

        String[] columnsToMap = new String[] { 
                Audio.Media.TITLE, 
                Audio.Media.ARTIST,
                Audio.Media.DISPLAY_NAME
        };
        int[] mapTo = new int[] {
                R.id.song_tf_1,
                R.id.song_tf_2,
                R.id.song_tf_path
        };

        ListAdapter mAdapter = new SimpleCursorAdapter(
                this, 
                R.layout.song_list_song,
                audioCursor, 
                columnsToMap, 
                mapTo
        );

        setListAdapter( mAdapter );

Единственная проблема в том, что я не знаю, как получить ПУТЬ песни, чтобы добавить его к

player.reset();
player.setDataSource(songPath);
player.prepare();
player.start();

Как я могу получить путь к песне для каждой песни и сохранить его в поле (R.id.song_tf_path) ... Или есть ли альтернатива, чтобы я мог сделать это лучше? Желательно без необходимости вручную сканировать все папки на наличие музыки и т. Д.

1 Ответ

2 голосов
/ 08 августа 2011

Похоже, вы можете заменить DISPLAY_NAME на DATA, и все должно работать нормально.Имейте в виду, однако, что это абсолютный путь, и, вероятно, будет иметь значительную длину.

Поскольку вы используете setListAdapter() Я собираюсь предположить, что вы используете активность списка.В этом случае добавьте метод onListItemClick() в ваш класс, чтобы выполнить действие при получении щелчка.Метод должен дать вам id, чтобы вы знали, какой элемент был нажат.

Примерно так будет работать

protected void onListItemClick (ListView l, View v, int position, long id) {
    String[] projection = new String[] {Audio.Media._ID, Audio.Media.DATA};
    Cursor c = managedQuery(ContentUris.withAppendedId(Audio.Media.EXTERNAL_CONTENT_URI, id),
                                                    projection,
                                                    null,
                                                    null,
                                                    null);
    c.moveToFirst();
    String p = c.getString(c.getColumnIndex(Audio.Media.DATA));

    //your code to load this path into your media player
    //and play it goes here

}

Путь песни будет сохранен в p, и вы можете делать с ним все, что захотите.

...