2010-12-08 16 views
5

Orijinal Soru çalma listeleri eklemek için: Ben pencereler telefon 7 kullanıyorum ve tek seferde onları dinlemek, böylece bir oyun listesine indirilen podcast eklemek istiyorum. Maalesef UI buna izin vermiyor. Bunu yapmak için herhangi bir API olup olmadığını bilmek istiyorum.API (windows telefonu 7 için) Zune

Modifiye Soru (windows telefonu 8 için): Burada lütfen lütuf ve API referans almaya hak kazanmak için pencereleri telefonun 8

için API "oynatma listesine ekle" gerek. Çalışan API referans bağlantısı veya örneği dışında doğru bir cevap kabul edilmeyecektir.

("Değil/kullanılamaz desteklenen" da cevap olarak kabul edilmeyecektir. Cevabın bu tür yazmak için zahmet etmeyin) varsayılan Zune API erişmenin demektir vardır

+0

@Ozgur normalde bu geçersiz bir düzenleme olduğunu ama bunu aproved senin ödülün neden oldu. – rekire

+0

Teşekkür ederiz @rekire – Ozgur

+0

@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

cevap

1

. Bunu belgelenmemiş yollarla (yerel katman) yapabilirsiniz, ancak sonuçta başvurunuzu Marketplace'ten reddedilecektir.

13

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ı:

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

+0

Ne yazık ki bu doğru bir cevap değildir. Burada yaptığınız şey sadece SongCollection'a şarkı eklemek. Sorum, PlayList'e nasıl eklenir ("oynatma listesine ekle"). Bu soruya lütuf kazanmaya başlamadan önce bu noktaya ulaştım. PlayList – Ozgur

+0

için herhangi bir öneriniz varsa lütfen cevabınızı tekrar gözden geçirin. Dennis'in dediği gibi, WP7 veya WP8'de bu mümkün değildir. Mümkün olan, sahte bir oynatma listesi oluşturan Müzik ve Video merkezinde sahte bir sanatçı oluşturmaktır. – JustinAngel

+0

JustinAngel, bu doğru cevap olmasa bile, çabalarınız için teşekkürler. En azından şarkıyı medya kitaplığına kopyalamak için bir örnek oluşturdunuz. – Ozgur