【问题标题】:Dynamic Playlists for MP3 files AndroidMP3 文件 Android 的动态播放列表
【发布时间】:2016-11-25 19:17:32
【问题描述】:

我对 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() 之后也是如此。我不确定哪种数据集最适合存储该数据,以及如何检索它。任何帮助将不胜感激!

【问题讨论】:

    标签: java android audio-player playlists android-music-player


    【解决方案1】:

    您需要将歌曲数据保存到设备

    Android 框架提供了多种持久性选项和策略:

    • 共享首选项 - 将基本数据轻松保存为私有持久字典中的键值对。
    • 本地文件 - 将任意文件保存到内部或外部设备存储。
    • SQLite 数据库 - 将数据保存在特定应用数据库的表中。
    • ORM - 使用更高级别的查询/更新语法描述和持久化模型对象。

    用例

    每个存储选项通常具有以下相关用例:

    • 共享首选项 - 用于应用首选项、密钥和会话信息。
    • 本地文件 - 通常用于 blob 数据或数据文件缓存(即磁盘映像缓存)
    • SQLite 数据库 - 用于复杂的本地数据操作或原始速度
    • ORM - 用于在本地存储简单的关系数据以减少 SQL 样板

    阅读更多:Persisting Data To Device


    您可以使用其中一个选项,但出于您的目的,SQLite DatabaseORM 是更好的选择。

    您可以访问Local Databases with SQLiteOpenHelper 获取 SQLite 数据库。

    对于ORM,可以试试greenDAO

    【讨论】:

    • 我打算使用 SQLite 作为播放列表,但我想知道格式。我以为我会分配一个位置编号来跟踪顺序,但是在歌曲完成后,所有其他条目都必须更新,这将是庞大的。我能想到的另一种选择是让它们永远增加,但同样,最终会变得庞大。你会怎么做呢?
    • 为了解决这个问题,我更喜欢单独制作一个表格进行跟踪。因此,我们创建一个仅包含 songId 和 trackNumber 列的表,而不是创建包含歌曲数据和曲目的表。 SongId 列,作为外键,将指向歌曲数据表中的一首歌曲。
    猜你喜欢
    • 2012-10-31
    • 1970-01-01
    • 2015-08-21
    • 1970-01-01
    • 2013-05-10
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多