API для добавления плейлистов в Zune

Исходный вопрос (для Windows Phone 7): Я использую Windows Phone 7 и хотел бы добавить загруженные подкасты в список воспроизведения, чтобы я мог слушать их за один раз. К сожалению, пользовательский интерфейс не позволяет этого. Я хотел бы знать, есть ли какой-либо API для этого.

Измененный вопрос (для Windows Phone 8): Мне нужен API "добавить в плейлист" для Windows Phone 8

Чтобы получить право на вознаграждение, предоставьте здесь ссылку на API. Кроме рабочей справочной ссылки API или образца, не будет приниматься в качестве правильного ответа.

("Недоступно/не поддерживается" также не будет принято в качестве ответа. Пожалуйста, не утруждайте себя написанием таких ответов)


person Krishna Kumar    schedule 08.12.2010    source источник
comment
@Ozgur обычно это недопустимое редактирование, но из-за вашей щедрости я одобрил это.   -  person rekire    schedule 31.12.2012
comment
@KrishnaKumar Я боролся с этой проблемой в своем музыкальном проигрывателе, но безуспешно. Если вы не хотите публиковать свое приложение, вы можете использовать DLLImport для доступа к ограниченным API stackoverflow.com/questions/14029388/   -  person onmyway133    schedule 02.01.2013


Ответы (2)


Как я упомянул в Twitter, в Windows Phone 8 вы можете добавлять или удалять песни из музыкальной библиотеки устройства. с помощью MediaLibraryExtensions. Новая возможность упоминается в MSDN здесь. Однако мне не удалось найти никакой документации по API, поэтому вот распечатка API для новой библиотеки Microsoft.Xna.Framework.MediaLibraryExtensions.dll:

//Microsoft.Xna.Framework.MediaLibraryExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=842cf8be1de50553

namespace Microsoft.Xna.Framework.Media.PhoneExtensions {
    public static class MediaLibraryExtensions {
        public static void Delete(MediaLibrary library, Song song);
        public static String GetPath(Picture picture);
        public static String GetPathFromToken(MediaLibrary library, String token);
        public static Stream GetPreviewImage(Picture picture);
        public static Song SaveSong(MediaLibrary library, Uri filename, SongMetadata songMetadata, SaveSongOperation operation);
    }

    public enum SaveSongOperation {
        CopyToLibrary, 
        MoveToLibrary
    }

    public sealed class SongMetadata {
        public SongMetadata();

        public Uri AlbumArtistBackgroundUri { get; set; }
        public String AlbumArtistName { get; set; }
        public Uri AlbumArtUri { get; set; }
        public String AlbumName { get; set; }
        public DateTime AlbumReleaseDate { get; set; }
        public Uri ArtistBackgroundUri { get; set; }
        public String ArtistName { get; set; }
        public TimeSpan Duration { get; set; }
        public String GenreName { get; set; }
        public String Name { get; set; }
        public Int32 TrackNumber { get; set; }
    }
}

Вы можете использовать этот новый API, вызвав SaveSong с локальным URI и потенциально переопределив метаданные ID3, включив пользовательские метаданные SongMetadata. Этот API позволяет вам хранить только новые песни, но я думаю, вы можете сгруппировать свои подкасты под фракционным исполнителем. Краткое примечание об этом API: обязательно добавьте новую ссылку DLL MediaLibraryExtensions DLL. Вы также можете оставить SongMetadata нулевым, чтобы ОС WP8 выводила метаданные ID3.

Вот простой фрагмент кода:

private async void MainPage_Loaded(object sender, RoutedEventArgs e)
{
    var sourceFile = await Package.Current.InstalledLocation.GetFileAsync("ChargeOfTheLightBridge.mp3");
    CopyFileIntoIsoStore(sourceFile);

    var library = new MediaLibrary();
    library.SaveSong(new Uri(sourceFile.Name, UriKind.RelativeOrAbsolute),
                        new SongMetadata()
                        {
                            ArtistName = "My Custom Artist",
                            AlbumArtistName = "My Custom Artist",
                            Name = "My Custom Track Name",
                            AlbumName = "clubbing baby seals in the face",
                            Duration = TimeSpan.FromSeconds(29),
                            TrackNumber = 1,
                            AlbumReleaseDate = DateTime.Now,
                            GenreName = "Podcasts"
                        },
                        SaveSongOperation.CopyToLibrary);
}

private async void CopyFileIntoIsoStore(StorageFile sourceFile)
{
    using (var s = await sourceFile.OpenReadAsync())
    using (var dr = new DataReader(s))
    using (var isoStore = IsolatedStorageFile.GetUserStoreForApplication())
    using (var targetFile = isoStore.CreateFile(sourceFile.Name))
    {
        var data = new byte[s.Size];
        await dr.LoadAsync((uint) s.Size);
        dr.ReadBytes(data);
        targetFile.Write(data, 0, data.Length);
    }
}

Обратите внимание, что для использования этого API нам пришлось сохранить файл в IsoStore. Также обратите внимание, что Uri неправильно сформирован или находится в стандартном Uri IsoStore. Это просто имя файла.

Когда мы запускаем этот фрагмент кода, мы видим следующее:

Список исполнителей с пользовательским исполнителемСписок альбомов с пользовательским исполнителем Просмотр альбома для пользовательского исполнителявоспроизведение пользовательской песни

person JustinAngel    schedule 02.01.2013
comment
К сожалению, это не правильный ответ. Здесь вы просто добавляете песню в SongCollection. У меня вопрос, как добавить в PlayList (добавить в плейлист). Я уже достиг этого момента, прежде чем я начал награду за этот вопрос. Пожалуйста, пересмотрите свой ответ, если у вас есть какие-либо предложения для PlayList. - person Ozgur; 02.01.2013
comment
Как сказал Деннис, это невозможно ни в WP7, ни в WP8. Что возможно, так это создать фиктивного исполнителя в разделе «Музыка и видео», который создает псевдоплейлист. - person JustinAngel; 02.01.2013
comment
JustinAngel, хотя это и неправильный ответ, спасибо за ваши усилия. По крайней мере, вы создали образец для копирования песни в медиатеку. - person Ozgur; 02.01.2013
comment
Привет, JustinAngel, есть намек на то, что означает токен в GetPathFromToken (библиотека MediaLibrary, токен String)? если я хочу выполнить обратный поиск данного объекта Song из MediaLibrary и получить его uri? (песни хранятся где-то на устройстве) - person thsieh; 27.04.2013

Не существует средств по умолчанию для доступа к Zune API. Вы можете сделать это недокументированными способами (собственный уровень), но это в конечном итоге приведет к отклонению вашего приложения из Marketplace.

person Den Delimarsky    schedule 09.04.2011