I mentioned on twitter olarak, Windows Phone 8'de MediaLibraryExtensions kullanarak aygıtın müzik arşivinden şarkı ekleyebilir veya çıkarabilirsiniz. Yeni yetenek MSDN here üzerinde belirtilmiştir.
//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; }
}
}
Sen ile SaveSong çağırarak bu yeni API kullanabilirsiniz: Ancak, ben API'ler için herhangi bir belge, bu yüzden burada yeni Microsoft.Xna.Framework.MediaLibraryExtensions.dll API çıktı bulunuyor Yerel bir URI ve potansiyel olarak özel bir SongMetadata ekleyerek ID3 meta verilerini geçersiz kılar. Bu API yalnızca yeni şarkılar depolamanıza izin verir, ancak sanırım podcast'lerinizi usta bir sanatçıya göre gruplayabilirsiniz. Bu API hakkında hızlı not, yeni DLL referansı MediaLibraryExtensions DLL'yi eklediğinizden emin olmaktır. SongMetadata'yı null olarak tutabilir ve WP8 OS çıkarım ID3 meta verilerine sahip olabilirsiniz.
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);
}
}
Not biz bu API kullanmak için IsoStore bir dosyayı kaydetmek zorunda:
Burada basit kod parçacığı bu. Ayrıca Uri'nin iyi biçimlendirilmemiş veya standart bir IsoStore Uri'de olmadığını unutmayın. Bu sadece dosya adı.
biz bu kodu çalıştırmak
aşağıdaki görebilirsiniz pasajı:
@Ozgur normalde bu geçersiz bir düzenleme olduğunu ama bunu aproved senin ödülün neden oldu. – rekire
Teşekkür ederiz @rekire – Ozgur
@KrishnaKumar Müzik çalar uygulamasında bu sorunu yaşamaya çalıştım, ancak hiç bir başarıya ulaşmadım. Uygulamanızı yayınlamayı önemsemiyorsanız, kısıtlı API'lere erişmek için DLLImport'u kullanabilirsiniz http://stackoverflow.com/questions/14029388/wp7-how-to-use-restricted-api – onmyway133