【发布时间】:2012-01-27 10:25:05
【问题描述】:
我是安卓新手。我正在开发基于媒体播放器的应用程序。 我的问题是如何获取正在播放的歌曲的艺术家、歌曲时长、专辑等。 我见过 android.media.RemoteControlClient.MetadataEditor 类,但包含在 Api 14 中。如果您有任何想法,请建议
提前致谢。
【问题讨论】:
标签: android
我是安卓新手。我正在开发基于媒体播放器的应用程序。 我的问题是如何获取正在播放的歌曲的艺术家、歌曲时长、专辑等。 我见过 android.media.RemoteControlClient.MetadataEditor 类,但包含在 Api 14 中。如果您有任何想法,请建议
提前致谢。
【问题讨论】:
标签: android
学习以下内容
http://developer.android.com/reference/android/media/MediaPlayer.html http://developer.android.com/reference/android/provider/MediaStore.Audio.html
在第二个音频类中包含专辑、艺术家等类。通过使用它们,您可以找到专辑艺术家等。
【讨论】:
您需要使用MediaMetadataRetriever。
例子:
myUri = Uri.parse("android.resource://your.package.name/" + R.raw.yourSoundFile);
retriever = new MediaMetadataRetriever();
retriever.setDataSource(this, myUri);
album = retriever.extractMetadata(MediaMetadataRetriever.METADATA_KEY_ALBUM);
Toast.makeText(this,album , Toast.LENGTH_SHORT).show();
其他字段可以在javadoc中找到,如:
METADATA_KEY_ALBUMARTISTMETADATA_KEY_ARTISTMETADATA_KEY_AUTHOR【讨论】:
为此,您可以使用content provider 查询media store 并从那里对表进行任何类型的修改。
一个完整的好例子:
//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));
}
// see http://androidsnippets.com/list-all-music-files
【讨论】:
managedQuery是Activity Class的方法,根据Activity的生命周期来管理光标。
getActivity().managedQuery(); 访问它