与众不同windows phone (40)

8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能

介绍

与众不同 windows phone 8.0 之 媒体

添加音乐到音乐中心,从音乐中心删除音乐

与图片中心相关的新增功能

BackgroundAudioPlayer 的新增功能

示例

1、演示如何添加音乐 到音乐中心,以及如何从音乐中心删除音乐

MusicMediaLibrary/MusicMediaLibrary.xaml

<phone:PhoneApplicationPage
    x:Class="Demo.Media.MusicMediaLibrary"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    FontFamily="{StaticResource PhoneFontFamilyNormal}"
    FontSize="{StaticResource PhoneFontSizeNormal}"
    Foreground="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations="Portrait" Orientation="Portrait"
    mc:Ignorable="d"
    shell:SystemTray.IsVisible="True">

    <Grid Background="Transparent">
        <StackPanel Orientation="Vertical">

            <Button x:Name="btnAdd" Content="添加音乐到音乐中心" Click="btnAdd_Click" />

            <Button x:Name="btnDelete" Content="从音乐中心删除音乐" Click="btnDelete_Click" />

        </StackPanel>
    </Grid>

</phone:PhoneApplicationPage>

MusicMediaLibrary/MusicMediaLibrary.xaml.cs

< /p>

/*
 * 演示如何添加音乐到音乐中心,以及如何从音乐中心删除音乐
 *
 *
 * 在 wp8 中新增了 Microsoft.Xna.Framework.Media.PhoneExtensions.MediaLibraryExtensions,其扩展了 MediaLibrary 类
 *     MediaLibrary.SaveSong(Uri filename, SongMetadata songMetadata, SaveSongOperation operation) - 保存音乐到音乐中心,返回 Song 对象
 *         Uri filename - 需要添加到音乐中心的音乐文件,必须在 IsolatedStorage 下
 *         SongMetadata songMetadata - 元数据
 *         SaveSongOperation operation - CopyToLibrary 拷贝音乐文件;MoveToLibrary 移动音乐文件
 *     MediaLibrary.Delete(Song song) - 根据 Song 对象从音乐中心删除数据
 *
 *
 * 注:
 * 1、需要在 manifest 中增加配置 <Capability Name="ID_CAP_MEDIALIB_AUDIO" />
 * 2、音乐文件只支持mp3和wma,且必须在 IsolatedStorage 下
 * 3、音乐的封面文件只支持jpg,且必须在 IsolatedStorage 下
 *
 *
 * 另:
 * 1、播放音乐或视频的话,需要在 manifest 中增加配置 <Capability Name="ID_CAP_MEDIALIB_PLAYBACK" />
 * 2、除了用 MediaElement 播放音乐外,还可以用 MediaPlayer(xna) 播放,参见:http://www.cnblogs.com/webabcd/archive/2011/07/11/2102713.html
 */

using System;
using System.Collections.Generic;
using System.Windows;
using Microsoft.Phone.Controls;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework.Media.PhoneExtensions;
using System.IO.IsolatedStorage;
using System.IO;
using Windows.Storage.Streams;
using Windows.Storage;
using System.Threading.Tasks;

namespace Demo.Media
{
    public partial class MusicMediaLibrary : PhoneApplicationPage
    {
        private Random _random = new Random();

        public MusicMediaLibrary()
        {
            InitializeComponent();
        }

        private async void btnAdd_Click(object sender, RoutedEventArgs e)
        {
            // 将相关文件复制到 ApplicationData 的 Local 目录下
            await CopyFileToApplicationData(new Uri("ms-appx:///Assets/Demo.mp3", UriKind.Absolute), "Demo.mp3");
            await CopyFileToApplicationData(new Uri("ms-appx:///Assets/Son.jpg", UriKind.Absolute), "Son.jpg");

            // 将相关文件复制到 IsolatedStorage 的根目录下
            // CopyFileToIsolatedStorage(new Uri("Assets/Demo.mp3", UriKind.Relative), "Demo.mp3");
            // CopyFileToIsolatedStorage(new Uri("Assets/Son.jpg", UriKind.Relative), "Son.jpg");

            // 需要添加到音乐中心的音乐文件仅支持mp3和wma,且必须在 ApplicationData 下,以下格式会先在 Local 目录下找,找不到再到 Local/IsolatedStorage 目录下找
            Uri musicUri = new Uri("Demo.mp3", UriKind.Relative);
            // 需要添加到音乐中心的音乐封面文件仅支持jpg,且必须在 ApplicationData 下,以下格式会先在 Local 目录下找,找不到再到 Local/IsolatedStorage 目录下找
            Uri picUri = new Uri("Son.jpg", UriKind.Relative);

            // 构造 SongMetadata 对象
            // 如果按以下内容设置 SongMetadata 对象,则音乐文件在音乐中心的保存路径为:webabcd/webabcd album/music xxxx.mp3
            SongMetadata sm = new SongMetadata();
            sm.AlbumName = "webabcd album";
            sm.ArtistName = "webabcd";
            sm.GenreName = "rock";
            sm.Name = "music " + _random.Next(1000, 10000).ToString();
            sm.ArtistBackgroundUri = picUri;
            sm.AlbumArtUri = picUri;
            sm.AlbumArtistBackgroundUri = picUri;

            MediaLibrary library = new MediaLibrary();

            try
            {
                // 添加音乐文件到音乐中心
                Song song = library.SaveSong(musicUri, sm, SaveSongOperation.CopyToLibrary);
            }
            catch (Exception ex)
            {
                // 如果文件已存在,则会抛出 System.InvalidOperationException 异常
                MessageBox.Show(ex.Message);
            }
        }

        private void btnDelete_Click(object sender, RoutedEventArgs e)
        {
            /*
             * MediaLibrary - 媒体库
             *     Songs - 返回音乐中心的 SongCollection
             *     Albums - 返回音乐中心的 AlbumCollection
             *     Artists - 返回音乐中心的 ArtistCollection
             *     Genres - 返回音乐中心的 GenreCollection
             *     Playlists - 返回音乐中心的 Playlists
             */

            MediaLibrary library = new MediaLibrary();

            // 通过 MediaLibrary 遍历音乐中心中的音乐文件
            foreach (Song song in library.Songs)
            {
                // 从音乐中心删除音乐文件
                if (song.Artist.Name == "webabcd")
                    library.Delete(song);
            }
        }

        // 将文件从 Package 复制到 IsolatedStorage 的根目录下
        private void CopyFileToIsolatedStorage(Uri sourceUri, string targetFileName)
        {
            IsolatedStorageFile isf = IsolatedStorageFile.GetUserStoreForApplication();
            using (Stream input = Application.GetResourceStream(sourceUri).Stream)
            {
                using (IsolatedStorageFileStream output = isf.CreateFile(targetFileName))
                {
                    byte[] readBuffer = new byte[4096];
                    int bytesRead = -1;

                    while ((bytesRead = input.Read(readBuffer, 0, readBuffer.Length)) > 0)
                    {
                        output.Write(readBuffer, 0, bytesRead);
                    }
                }
            }
        }

        // 将文件从 Package 复制到 ApplicationData 的 Local 目录下
        private async Task CopyFileToApplicationData(Uri sourceUri, string targetFileName)
        {
            StorageFolder applicationFolder = ApplicationData.Current.LocalFolder;

            StorageFile sourceFile = await StorageFile.GetFileFromApplicationUriAsync(sourceUri);
            await sourceFile.CopyAsync(applicationFolder, targetFileName, NameCollisionOption.ReplaceExisting);
        }
    }
}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索文件
, 音乐
, uri
, task await delay
, using
, 音乐文件
assets目录
windows phone、windowsphone、windows phone 10、windowsphone手机、windowsphone应用商店,以便于您获取更多的相关知识。

时间: 2024-12-23 04:26:37

与众不同windows phone (40)的相关文章

与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能

原文:与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 [源码下载] 与众不同 windows phone (40) - 8.0 媒体: 音乐中心的新增功能, 图片中心的新增功能, 后台音乐播放的新增功能 作者:webabcd 介绍与众不同 windows phone 8.0 之 媒体 添加音乐到音乐中心,从音乐中心删除音乐 与图片中心相关的新增功能 BackgroundAudioPlayer 的新增功能 示例

与众不同windows phone (23)

Device(设备)之硬件状态, 系统状态, 网络状态 介绍 与众不同 windows phone 7.5 (sdk 7.1) 之设备 硬件状态 系统状态 网络状态 示例 1.演示如何获取硬件的相关状态 HardwareStatus.xaml.cs /* * 演示如何获取设备的硬件信息 */ using System; using System.Collections.Generic; using System.Linq; using System.Net; using System.Windo

与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单“应用程序...”和“共享...”关联, 与 Windows Phone 的图片中心集成

原文:与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单"应用程序..."和"共享..."关联, 与 Windows Phone 的图片中心集成 [索引页][源码下载] 与众不同 windows phone (16) - Media(媒体)之编辑图片, 保存图片到相册, 与图片的上下文菜单"应用程序..."和"共享..."关联, 与 Windows Phon

与众不同 windows phone (23) - Device(设备)之硬件状态, 系统状态, 网络状态

原文:与众不同 windows phone (23) - Device(设备)之硬件状态, 系统状态, 网络状态 [索引页][源码下载] 与众不同 windows phone (23) - Device(设备)之硬件状态, 系统状态, 网络状态 作者:webabcd 介绍与众不同 windows phone 7.5 (sdk 7.1) 之设备 硬件状态 系统状态 网络状态 示例1.演示如何获取硬件的相关状态HardwareStatus.xaml.cs /* * 演示如何获取设备的硬件信息 */

与众不同windows phone (6) Isolated Storage(独立存储)

介绍 与众不同 windows phone 7.5 (sdk 7.1) 之独立存储 概述 独立存储的读/写的Demo 读/写 key/value 形式数据到独立存储的快捷方法 示例 1.概述 Summary.xaml <phone:PhoneApplicationPage x:Class="Demo.IsolatedStorageDemo.Summary" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/prese

与众不同windows phone (47)

8.0 其它: 锁屏信息和锁屏背景, 电池状态, 多分辨率, 商店, 内置协议, 快速恢复 介绍 与众不同 windows phone 8.0 之 其它 锁屏信息和锁屏背景 电池状态 多分辨率应用 与 Windows Phone 商店相关的操作 系统的内置协议 快速恢复应用 App.xaml.cs 的说明 manifest 的说明 示例 1.演示如何发送信息到锁屏,以及如何修改锁屏背景 Others/LockScreen.xaml <phone:PhoneApplicationPage x:Cl

与众不同windows phone (46) 8.0 通信: Socket, 其它

介绍 与众不同 windows phone 8.0 之 通信 Socket Demo 获取当前连接的信息 http rss odata socket bluetooth nfc voip winsock 示例 1.演示 socket tcp 的应用 (本例既做服务端又做客户端) Communication/SocketDemo.xaml <phone:PhoneApplicationPage x:Class="Demo.Communication.SocketDemo" xmln

与众不同windows phone (45) 8.0 语音: TTS, 语音识别, 语音命令

介绍 与众不同 windows phone 8.0 之 语音 TTS(Text To Speech) 语音识别 语音命令 示例 1.演示 TTS(Text To Speech)的应用 Speech/TTS.xaml <phone:PhoneApplicationPage x:Class="Demo.Speech.TTS" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmln

与众不同windows phone (44) 8.0 位置和地图

介绍 与众不同 windows phone 8.0 之 位置和地图 位置(GPS) - Location API 诺基亚地图 示例 1.演示新 Location API 的应用 GPS/Demo.xaml <phone:PhoneApplicationPage x:Class="Demo.GPS.Demo" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x=&qu