Android Создать плейлист
Кто-нибудь знает, как добавить плейлисты в Android в коде?
Я как бы понял, что мне нужно вставить его в распознаватель контента, но мне нужно просто вставить идентификатор песни или мне нужно поместить все данные песни?
Я искал пример кода, но еще не нашел его.
EDIT:
Найден ответ, вот как я это делаю:
public static void addToPlaylist(ContentResolver resolver, int audioId) {
String[] cols = new String[] {
"count(*)"
};
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID);
Cursor cur = resolver.query(uri, cols, null, null, null);
cur.moveToFirst();
final int base = cur.getInt(0);
cur.close();
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(base + audioId));
values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId);
resolver.insert(uri, values);
}
public static void removeFromPlaylist(ContentResolver resolver, int audioId) {
Log.v("made it to add",""+audioId);
String[] cols = new String[] {
"count(*)"
};
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID);
Cursor cur = resolver.query(uri, cols, null, null, null);
cur.moveToFirst();
final int base = cur.getInt(0);
cur.close();
ContentValues values = new ContentValues();
resolver.delete(uri, MediaStore.Audio.Playlists.Members.AUDIO_ID +" = "+audioId, null);
}
Ответы
Ответ 1
Чтобы получить вопрос из "не ответил", я вставил код OP здесь:
public static void addToPlaylist(ContentResolver resolver, int audioId) {
String[] cols = new String[] {
"count(*)"
};
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID);
Cursor cur = resolver.query(uri, cols, null, null, null);
cur.moveToFirst();
final int base = cur.getInt(0);
cur.close();
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, Integer.valueOf(base + audioId));
values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, audioId);
resolver.insert(uri, values);
}
public static void removeFromPlaylist(ContentResolver resolver, int audioId) {
Log.v("made it to add",""+audioId);
String[] cols = new String[] {
"count(*)"
};
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID);
Cursor cur = resolver.query(uri, cols, null, null, null);
cur.moveToFirst();
final int base = cur.getInt(0);
cur.close();
ContentValues values = new ContentValues();
resolver.delete(uri, MediaStore.Audio.Playlists.Members.AUDIO_ID +" = "+audioId, null);
}
Ответ 2
Чтобы ответить на комментарий Ярослава Зарубы, код лучше с PLAY_ORDER добавленного трека следующим образом:
cur.moveToLast();
final int base = cur.getInt(cur.getColumnIndex(Playlists.Members.PLAY_ORDER));
cur.close();
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER,
Integer.valueOf(base + 1));
Изменились две основные вещи: мы используем последний элемент плейлиста (cur.moveToLast()), и добавляем 1 к его значению PLAY_ORDER, чтобы определить новый трек PLAY_ORDER. Дело в том, что в списке воспроизведения есть последовательные треки.
Вы также можете добавить 10, например, чтобы вы могли вставлять дорожки до или после нового трека.
Я также изменил способ получения идентификатора трека. В самом деле, мы не хотим, чтобы возникали проблемы с получением неверных данных, поэтому мы указываем нужный столбец.
Ответ 3
Это исправленный код, который удаляет песню из списка воспроизведения:
public static void removeFromPlaylist(ContentResolver resolver, int audioId)
{
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", YOUR_PLAYLIST_ID);
resolver.delete(uri, MediaStore.Audio.Playlists.Members._ID +" = "+audioId, null);
}
Ответ 4
Используйте этот код сам по себе. Он добавит песню с данным id = songID
в список воспроизведения с именем playlistName
Если плейлист уже существует, он добавит к существующему, или он создаст новый, а затем добавит к нему песню
/**
* This function add song with id songID to playlist playlistName
* if playlist does exist it will add to exiixting one or it will create new
*
* @param playlistName
* @param songID
*/
private void addToPlaylist(String playlistName, int songID) {
//Vibrate device
Utils.vibrate(getApplicationContext());
//get all playlists
Cursor playListCursor = AppController.getGlobalContentResolvere().query(
MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, new String[]{"*"}, null, null,
null);
long playlistId = 0;
playListCursor.moveToFirst();
do {
//check if selected playlsit already exist
if (playListCursor.getString(playListCursor
.getColumnIndex(MediaStore.Audio.Playlists.NAME)).
equalsIgnoreCase(playlistName)) {
playlistId = playListCursor.getLong(playListCursor
.getColumnIndex(MediaStore.Audio.Playlists._ID));
break;
}
} while (playListCursor.moveToNext());
//Playlist doesnt exist creating new with given name
if (playlistId == 0) {
Log.d(TAG, "CREATING PLAYLIST: " + playlistName);
ContentValues playlisrContentValue = new ContentValues();
//Add name
playlisrContentValue.put(MediaStore.Audio.Playlists.NAME, playlistName);
//update modified value
playlisrContentValue.put(MediaStore.Audio.Playlists.DATE_MODIFIED,
System.currentTimeMillis());
Uri playlistURl = AppController.getGlobalContentResolvere().insert(
MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI, playlisrContentValue);
Log.d(TAG, "Added PlayLIst: " + playlistURl);
} else {
//Playlist alreay exist add to playlist
String[] cols = new String[]{
"count(*)"
};
Uri uri = MediaStore.Audio.Playlists.Members.getContentUri("external", playlistId);
Cursor favListCursor = AppController.getGlobalContentResolvere().query(uri, cols, null, null, null);
favListCursor.moveToFirst();
final int base = favListCursor.getInt(0);
//playlist updated delete older playlist art so that we can create new
Toast.makeText(AudioPlayerActivity.this, "deleted old file" + new File(AppContants.PLAY_LIST_DIR + playlistId + ".png").delete(), Toast.LENGTH_SHORT).show();
favListCursor.close();
//add song to last
ContentValues values = new ContentValues();
values.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, base + songID);
values.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, songID);
AppController.getGlobalContentResolvere().insert(uri, values);
//Debug purpose
Toast.makeText(AudioPlayerActivity.this, "Added to Favourite list " +
CenterRepository.getInstance().getAudioCollection().getSongAt(AppConfig.SONG_NUMBER).getTitle()
, Toast.LENGTH_SHORT).show();
}
}