API для добавления плейлистов в Zune - PullRequest
5 голосов
/ 08 декабря 2010

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

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

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

(«Не доступно / не поддерживается» также не будет принято в качестве ответа. Пожалуйста, не беспокойтесь о написании такого ответа)

Ответы [ 2 ]

13 голосов
/ 02 января 2013

Как я упомянул в твиттере , в 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 как ноль и иметь метаданные ID3 для операционной системы WP8.

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

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);
    }
}

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

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

Artist list with custom artist Album list with custom artist Album view for custom artist playing a custom song

1 голос
/ 09 апреля 2011

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

...