2016-11-25 2 views
0

Я довольно новичок в разработке Android, и сейчас я пытаюсь сделать медиаплеер. Моя следующая цель - реализовать систему плейлистов, в которую элементы могут быть добавлены, а также удалены и могут быть автоматически удалены при запуске onCompleteListener(). В настоящее время я потянув песни с SD-карты с помощью contentResolverДинамические плейлисты для файлов MP3 Android

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(). Я не уверен, какие типы данных лучше всего использовать для хранения этих данных и как их получить. Любая помощь приветствуется!

ответ

0

данные сохраняются на устройстве.

Андроида рамки предлагает несколько вариантов и стратегий по стойкости:

  • Общие предпочтения - Простое сохранение основных данных в качестве пары ключ-значение в частном сохранялось словарем.
  • Локальные файлы - Сохранение произвольных файлов во внутреннее или внешнее хранилище устройств.
  • База данных SQLite - Сохранять данные в таблицах в базе данных конкретных приложений.
  • ORM - Описать и сохранить объекты модели с использованием синтаксиса запроса/обновления более высокого уровня.

Прецеденты

Каждый вариант хранения типично связанные случаи использования следующим образом:

  • Общие предпочтения - Используется для приложений предпочтений, ключей, и информации о сеансе.
  • Локальные файлы - Часто используется для данных BLOb или файлов данных кэшей (т.е. диск кэша изображений)
  • SQLite Database - Используется для комплексного локального манипулирования данными или для сырой скорости
  • ORM - Используется для хранить простые реляционные данные локально для сокращения SQL-шаблона

Подробнее: Persisting Data To Device.


Вы можете использовать один из вариантов, но для вашей цели, SQLite Database или ORM тем лучше варианты.

Вы можете посетить Local Databases with SQLiteOpenHelper для базы данных SQLite.

Для ORM вы можете попробовать greenDAO.

+0

Я планирую использовать SQLite для плейлиста, но мне интересно о форматировании. Я думал, что я бы назначил номер позиции для отслеживания порядка, но затем по завершении песни все остальные записи должны были быть обновлены, что было бы громоздким. Альтернатива, о которой я могу думать, это просто увеличить их навсегда, но опять же, что в конечном итоге становится громоздким. Как бы вы это сделали? –

+0

Чтобы решить эту проблему, я предпочитаю сделать отдельную таблицу для трека. Итак, вместо создания таблицы с данными песни и дорожкой мы создаем таблицу с только столбцами songId и trackNumber. Столбец SongId, как внешний ключ, будет указывать на песню в таблице данных песни. –

Смежные вопросы