无法在 android 中使用 MediaPlayer 播放 MediaStore.Audio 歌曲
Posted
技术标签:
【中文标题】无法在 android 中使用 MediaPlayer 播放 MediaStore.Audio 歌曲【英文标题】:Unable to play MediaStore.Audio songs with MediaPlayer in android 【发布时间】:2015-06-26 01:34:39 【问题描述】:我目前正在制作一个简单的音乐播放器,并且我已经通过下面的示例脚本成功地从媒体中获取了音乐列表。但是,问题是我不知道如何从 ContentResolver 播放音乐。我读过http://developer.android.com/reference/android/provider/MediaStore.Audio.html 但很难理解。有没有好的示例或教程?我想要实现的只是在 android 中播放 ContentResolver 中的音乐。
public Track(Cursor cursor)
id = cursor.getLong( cursor.getColumnIndex( MediaStore.Audio.Media._ID ));
path = cursor.getString( cursor.getColumnIndex(MediaStore.Audio.Media.DATA));
title = cursor.getString( cursor.getColumnIndex( MediaStore.Audio.Media.TITLE ));
album = cursor.getString( cursor.getColumnIndex( MediaStore.Audio.Media.ALBUM ));
artist = cursor.getString( cursor.getColumnIndex( MediaStore.Audio.Media.ARTIST ));
albumId = cursor.getLong( cursor.getColumnIndex( MediaStore.Audio.Media.ALBUM_ID ));
artistId = cursor.getLong( cursor.getColumnIndex( MediaStore.Audio.Media.ARTIST_ID ));
duration = cursor.getLong( cursor.getColumnIndex( MediaStore.Audio.Media.DURATION ));
trackNo = cursor.getInt( cursor.getColumnIndex( MediaStore.Audio.Media.TRACK ));
uri = ContentUris.withAppendedId(MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
public static List getItems(Context activity)
List tracks = new ArrayList();
ContentResolver resolver = activity.getContentResolver();
Cursor cursor = resolver.query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
Track.COLUMNS,
null,
null,
null
);
while( cursor.moveToNext() )
if( cursor.getLong(cursor.getColumnIndex( MediaStore.Audio.Media.DURATION)) < 3000 )continue;
tracks.add(new Track(cursor));
cursor.close();
return tracks;
【问题讨论】:
【参考方案1】:这是谷歌提供的文档,我引用:
在媒体播放器应用程序中可能有用的另一个功能是检索用户在设备上的音乐的能力。您可以通过在 ContentResolver 中查询外部媒体来做到这一点:
ContentResolver contentResolver = getContentResolver();
Uri uri = android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor cursor = contentResolver.query(uri, null, null, null, null);
if (cursor == null)
// query failed, handle error.
else if (!cursor.moveToFirst())
// no media on the device
else
int titleColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media.TITLE);
int idColumn = cursor.getColumnIndex(android.provider.MediaStore.Audio.Media._ID);
do
long thisId = cursor.getLong(idColumn);
String thisTitle = cursor.getString(titleColumn);
// ...process entry...
while (cursor.moveToNext());
要将其与 MediaPlayer 一起使用,您可以这样做:
long id = /* retrieve it from somewhere */;
Uri contentUri = ContentUris.withAppendedId(
android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, id);
mMediaPlayer = new MediaPlayer();
mMediaPlayer.setAudiostreamType(AudioManager.STREAM_MUSIC);
mMediaPlayer.setDataSource(getApplicationContext(), contentUri);
// ...prepare and start...
来源: Media Playback: Retrieving Media from a Content Resolver
【讨论】:
以上是关于无法在 android 中使用 MediaPlayer 播放 MediaStore.Audio 歌曲的主要内容,如果未能解决你的问题,请参考以下文章
Android笔记 - Binder之请求注册Service组件