MP3 文件的动态播放列表 Android
Dynamic Playlists for MP3 files Android
我对 android 开发还很陌生,目前正在尝试制作媒体播放器。我的下一个目标是实现一个播放列表系统,可以添加和删除项目,并且可以在触发 onCompleteListener() 时自动删除。我目前正在使用 contentResolver
从 SD 卡中提取歌曲
public void getSongList(){
ContentResolver musicResolver=getContentResolver();
Uri musicUri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor=musicResolver.query(musicUri,null,null,null,null);
if(musicCursor!=null && musicCursor.moveToFirst()){
//get columns
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);
//add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
}
while (musicCursor.moveToNext());
}
}
至此,我已经设置好了,因此我可以单击 listView 中的项目,它可以通过服务开始播放歌曲。我的问题是存储歌曲 URI 和位置数据的最佳方式是什么。我还希望应用程序能够在应用程序重新启动时存储播放列表的最后位置,即使在 onDestroy() 之后也是如此。我不确定哪种数据集最适合用于存储该数据,以及如何检索它。任何帮助将不胜感激!
您需要将歌曲数据持久化到设备。
Android 框架提供了几种持久性选项和策略:
- 共享首选项 - 轻松将基本数据保存为私有持久字典中的键值对。
- 本地文件 - 将任意文件保存到内部或外部设备存储。
- SQLite 数据库 - 将数据保存在特定于应用程序的数据库中的表中。
- ORM - 使用更高级别的 query/update 语法描述和持久化模型对象。
用例
每个存储选项通常都有如下相关的用例:
- 共享首选项 - 用于应用首选项、密钥和会话信息。
- 本地文件 - 通常用于 blob 数据或数据文件缓存(即磁盘映像缓存)
- SQLite 数据库 - 用于复杂的本地数据操作或原始速度
- ORM - 用于在本地存储简单的关系数据以减少 SQL 样板文件
阅读更多:Persisting Data To Device.
您可以使用其中一个选项,但为了您的目的,SQLite Database 或 ORM 更好选项。
您可以访问 Local Databases with SQLiteOpenHelper 获取 SQLite 数据库。
对于ORM,你可以试试greenDAO。
我对 android 开发还很陌生,目前正在尝试制作媒体播放器。我的下一个目标是实现一个播放列表系统,可以添加和删除项目,并且可以在触发 onCompleteListener() 时自动删除。我目前正在使用 contentResolver
从 SD 卡中提取歌曲public void getSongList(){
ContentResolver musicResolver=getContentResolver();
Uri musicUri= MediaStore.Audio.Media.EXTERNAL_CONTENT_URI;
Cursor musicCursor=musicResolver.query(musicUri,null,null,null,null);
if(musicCursor!=null && musicCursor.moveToFirst()){
//get columns
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);
//add songs to list
do {
long thisId = musicCursor.getLong(idColumn);
String thisTitle = musicCursor.getString(titleColumn);
String thisArtist = musicCursor.getString(artistColumn);
songList.add(new Song(thisId, thisTitle, thisArtist));
}
while (musicCursor.moveToNext());
}
}
至此,我已经设置好了,因此我可以单击 listView 中的项目,它可以通过服务开始播放歌曲。我的问题是存储歌曲 URI 和位置数据的最佳方式是什么。我还希望应用程序能够在应用程序重新启动时存储播放列表的最后位置,即使在 onDestroy() 之后也是如此。我不确定哪种数据集最适合用于存储该数据,以及如何检索它。任何帮助将不胜感激!
您需要将歌曲数据持久化到设备。
Android 框架提供了几种持久性选项和策略:
- 共享首选项 - 轻松将基本数据保存为私有持久字典中的键值对。
- 本地文件 - 将任意文件保存到内部或外部设备存储。
- SQLite 数据库 - 将数据保存在特定于应用程序的数据库中的表中。
- ORM - 使用更高级别的 query/update 语法描述和持久化模型对象。
用例
每个存储选项通常都有如下相关的用例:
- 共享首选项 - 用于应用首选项、密钥和会话信息。
- 本地文件 - 通常用于 blob 数据或数据文件缓存(即磁盘映像缓存)
- SQLite 数据库 - 用于复杂的本地数据操作或原始速度
- ORM - 用于在本地存储简单的关系数据以减少 SQL 样板文件
阅读更多:Persisting Data To Device.
您可以使用其中一个选项,但为了您的目的,SQLite Database 或 ORM 更好选项。
您可以访问 Local Databases with SQLiteOpenHelper 获取 SQLite 数据库。
对于ORM,你可以试试greenDAO。