[英]List of albums from MediaStore to adapter/listview
我可以列出媒體存儲區中所有歌曲的列表,但我也想按藝術家/專輯/文件夾/流派/播放列表對其進行排序。
我通常使用游標查詢自己的數據庫,但這在這種情況下無效,我必須使用適配器。 我可以通過更改參數來查詢它,但是我不知道如何在適配器中對其進行分組(我找不到如何添加/使用GROUPBY),這意味着我需要適配器中的每個藝術家/專輯/文件夾/ ..僅一次,而不是每首歌。
我試圖通過互聯網搜索,但沒有找到答案。 我還在這里找到了一些主題,但是對於我來說仍然不清楚。 因此,我想請您在此示例中向我展示:
package com.exercise.AndroidListMedia;
import android.app.ListActivity;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.provider.MediaStore;
import android.provider.MediaStore.Video.Media;
import android.view.View;
import android.widget.ListAdapter;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.Toast;
public class AndroidListMediaActivity extends ListActivity {
SimpleCursorAdapter adapter;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
String[] from = {
MediaStore.MediaColumns.TITLE};
int[] to = {
android.R.id.text1};
Cursor cursor = managedQuery(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
null,
null,
null,
MediaStore.Audio.Media.TITLE);
adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, cursor, from, to);
setListAdapter(adapter);
}
@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Cursor cursor = adapter.getCursor();
cursor.moveToPosition(position);
String _id = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media._ID));
String title = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.TITLE));
String artist = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ARTIST));
String album = cursor.getString(cursor.getColumnIndex(MediaStore.Audio.Media.ALBUM));
int duration = cursor.getInt(cursor.getColumnIndex(MediaStore.Audio.Media.DURATION));
String info = "_ID: " + _id + "\n"
+ "TITLE: " + title + "\n"
+ "ARTIST: " + artist + "\n"
+ "ALBUM: " + album + "\n"
+ "DURATION: " + duration/1000 + "s";
Toast.makeText(this, info, Toast.LENGTH_LONG).show();
}
}
謝謝你的任何想法。
這會給您所有專輯:
public Cursor getAlbumAlbumcursor(Context context, Cursor cursor)
{
String where = null;
ContentResolver cr = context.getContentResolver();
final Uri uri = MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
final String _id = MediaStore.Audio.Albums._ID;
final String album_id = MediaStore.Audio.Albums.ALBUM_ID;
final String album_name =MediaStore.Audio.Albums.ALBUM;
final String artist = MediaStore.Audio.Albums.ARTIST;
final String[]columns={_id,album_name, artist};
cursor = cr.query(uri,columns,where,null, null);
return cursor;
}
這使您了解所有曲目:
public Cursor getTrackTrackcursor(Context context, Cursor cursor)
{
final String track_id = MediaStore.Audio.Media._ID;
final String track_no =MediaStore.Audio.Media.TRACK;
final String track_name =MediaStore.Audio.Media.TITLE;
final String artist = MediaStore.Audio.Media.ARTIST;
final String duration = MediaStore.Audio.Media.DURATION;
final String album = MediaStore.Audio.Media.ALBUM;
final String composer = MediaStore.Audio.Media.COMPOSER;
final String year = MediaStore.Audio.Media.YEAR;
final String path = MediaStore.Audio.Media.DATA;
Uri uri = MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
ContentResolver cr = context.getContentResolver();
final String[]columns={track_id, track_no, artist, track_name,album, duration, path, year, composer};
cursor = cr.query(uri,columns,null,null,null);
return cursor;
}
這將為您提供所有播放列表:
public Cursor getandroidPlaylistcursor(Context context,Cursor cursor)
{
ContentResolver resolver = context.getContentResolver();
final Uri uri=MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI;
final String id = MediaStore.Audio.Playlists._ID;
final String name = MediaStore.Audio.Playlists.NAME;
final String[]columns = {id,name};
final String criteria = MediaStore.Audio.Playlists.NAME.length() + " > 0 " ;
final Cursor crplaylists = resolver.query(uri, columns, criteria, null,name + " `ASC");
return crplaylists;
}
請注意不同的uri的MediaStore.Audio.Media用於曲目,MediaStore.Audio.Albums用於專輯詳細信息,MediaStore.Audio.Playlists用於播放列表。
cr.query中的最后一個參數是排序順序,“我的播放列表”顯示了一個示例:name +“`ASC”,它按播放列表名稱進行排序。 我希望這有幫助
我開發了一個應用程序,可讓您管理/創建播放列表並使用這些技術。 https://play.google.com/store/apps/details?id=com.flyingdutchman.playlistmanager&hl=zh_CN或在Google Play中搜索播放列表管理器。
public ArrayList<SongBeen> getAlbumList() {
ArrayList<SongBeen> albumList=new ArrayList<SongBeen>();
ContentResolver musicResolver = activity.getContentResolver();
Uri musicUri = android.provider.MediaStore.Audio.**Albums**.EXTERNAL_CONTENT_URI;
Cursor musicCursor = musicResolver.query(musicUri, null, null, null, null);
if(musicCursor!=null && musicCursor.moveToFirst()){
int titleColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media._ID);
int artistColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ARTIST);
int albumColumn = musicCursor.getColumnIndex
(android.provider.MediaStore.Audio.Media.ALBUM);
//add songs to list
do {
SongBeen been=new SongBeen();
been.setId(musicCursor.getLong(idColumn));
been.setAlbum(musicCursor.getString(albumColumn));
been.setArtist(musicCursor.getString(artistColumn));
albumList.add(been);
}
while (musicCursor.moveToNext());
}
return albumList;
}
注意:
更改專輯或其他任何我們都能得到的東西
Uri musicUri = android.provider.MediaStore.Audio.Albums.EXTERNAL_CONTENT_URI;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.