2015-08-06 11 views
6

Ich versuche, ein Remote-Bild als Desktop-Hintergrund/Telefon Lockscreen in meinem W10 UWP-App einzurichten:W10 UWP - Set Remote-Bild als Desktop-Hintergrund/lockscreen

string name = "test_image.jpg"; 
Uri uri = new Uri("http://www.ucl.ac.uk/news/news-articles/1213/muscle-fibres-heart.jpg"); 

// download image from uri into temp storagefile 
var file = await StorageFile.CreateStreamedFileFromUriAsync(name, uri, RandomAccessStreamReference.CreateFromUri(uri)); 

// file is readonly, copy to a new location to remove restrictions 
var file2 = await file.CopyAsync(KnownFolders.PicturesLibrary); 

// test -- WORKS! 
//var file3 = await StorageFile.GetFileFromApplicationUriAsync(new Uri("ms-appx:///Assets/Design/1.jpg")); 

// try set lockscreen/wallpaper 
if (ApiInformation.IsTypePresent("Windows.Phone.UI.Input.HardwareButtons")) // Phone 
    success = await UserProfilePersonalizationSettings.Current.TrySetLockScreenImageAsync(file2); 
else // PC 
    success = await UserProfilePersonalizationSettings.Current.TrySetWallpaperImageAsync(file2); 

file1 wie es funktioniert nicht ist schreibgeschützt, also kopiere ich es an einen neuen Ort (Bilder-Bibliothek), um Einschränkungen zu entfernen ->file2.

Hinweis: file3 Werke, so dass ich bin mir nicht sicher, was passiert, - Ich gehe davon aus TrySetWallpaperImageAsync/TrySetLockScreenImageAsync akzeptiert nur msappx lokale Dateien ...

Wer irgendwelche Ideen auf der Arbeit arounds haben?

Danke.

+3

Haben Sie versucht, die Zieldatei in ApplicationData.Current.LocalFolder zu speichern? Anscheinend akzeptieren diese Methoden nur Dateien aus bestimmten Ordnern. –

+0

Ah, das war's! Vielen Dank. –

+0

Ich würde auch vorschlagen, zu überprüfen, ob Ihre Gerätefamilie Mobile ist, anstatt nach API zu suchen, während es in Zukunft keinen Unterschied mehr gibt, es funktioniert möglicherweise nicht richtig, abhängig davon, welche Gerätefamilien erscheinen. –

Antwort

5

Speichern Sie zuerst Ihr Remote-Image auf ApplicationData.Current.LocalFolder, verwenden Sie dann TrySetWallpaperImageAsync/TrySetLockScreenImageAsync und zeigen Sie auf das gespeicherte Bild, anstatt direkt auf das Remote-Image zu verweisen.