2013-08-20 57 views
1

我在IsolatedStorage中有一个图像,并且我想以编程方式将其设置为设备锁定屏幕背景。我的问题是我无法获得LockScreen.SetImageUri所需的正确路径。从参考http://msdn.microsoft.com/en-us/library/windowsphone/develop/jj206968(v=vs.105).aspx可以明显看出``ms-appdata:/// local /“是本地图像所需的前兆。如何使用LockScreen.SetImageUri设置Windows Phone 8锁定屏幕背景

var schema = isAppResource ? "ms-appx:///" : "ms-appdata:///Local/"; 
var uri = new Uri(schema + filePathOfTheImage, UriKind.Absolute); 

我已经在我的应用程序IsolatedStorage称为Pictures其中JPG图像从CameraCaptureTask保存创建的文件夹。我曾尝试几种方法通过上述方案访问此文件夹中的图片,但我总是在下一行

Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri); 

调试时,然而,我看到uri = "ms-appdata:///Local/Pictures/WP_20130812_001.jpg",这是怎么不正确收到ArgumentException

我实现如下

private void recent_SelectionChanged(object sender, SelectionChangedEventArgs e) 
{    
    capturedPicture = (sender as LongListSelector).SelectedItem as CapturedPicture; 

    if (capturedPicture != null) 
    { 
     //filename is the name of the image in the IsolatedStorage folder named Pictures 
     fileName = capturedPicture.FileName; 
    } 
} 

void setAsLockScreenMenuItem_Click(object sender, EventArgs e) 
{ 
    if (!String.IsNullOrEmpty(fileName)) 
    { 
     //PictureRepository.IsolatedStoragePath is a string = "Pictures"     
     //LockHelper("isostore:/" + PictureRepository.IsolatedStoragePath + "/" + fileName, false); //results in FileNotFoundException 
     LockHelper(PictureRepository.IsolatedStoragePath + "/" + fileName, false); //results in ArgumentException 
    } 
    else 
    { 
     MessageBoxResult result = MessageBox.Show("You must select an image to set it as your lock screen.", "Notice", MessageBoxButton.OK); 
     if (result == MessageBoxResult.OK) 
     { 
      return; 
     } 
    } 
} 

private async void LockHelper(string filePathOfTheImage, bool isAppResource) 
{ 
try 
{ 
    var isProvider = Windows.Phone.System.UserProfile.LockScreenManager.IsProvidedByCurrentApplication; 
    if (!isProvider) 
    { 
     // If you're not the provider, this call will prompt the user for permission. 
     // Calling RequestAccessAsync from a background agent is not allowed. 
     var op = await Windows.Phone.System.UserProfile.LockScreenManager.RequestAccessAsync(); 

     // Only do further work if the access was granted. 
     isProvider = op == Windows.Phone.System.UserProfile.LockScreenRequestResult.Granted; 
    } 

    if (isProvider) 
    { 
     // At this stage, the app is the active lock screen background provider. 

     // The following code example shows the new URI schema. 
     // ms-appdata points to the root of the local app data folder. 
     // ms-appx points to the Local app install folder, to reference resources bundled in the XAP package. 
     var schema = isAppResource ? "ms-appx:///" : "ms-appdata:///Local/"; 
     var uri = new Uri(schema + filePathOfTheImage, UriKind.Absolute); 

     // Set the lock screen background image. 
     Windows.Phone.System.UserProfile.LockScreen.SetImageUri(uri); 

     // Get the URI of the lock screen background image. 
     var currentImage = Windows.Phone.System.UserProfile.LockScreen.GetImageUri(); 
     System.Diagnostics.Debug.WriteLine("The new lock screen background image is set to {0}", currentImage.ToString()); 
    } 
    else 
    { 
     MessageBox.Show("You said no, so I can't update your background."); 
    } 
} 
catch (System.Exception ex) 
{ 
    System.Diagnostics.Debug.WriteLine(ex.ToString()); 
} 

}

我怎么可能会修改LockScreen.SetImageUri到正确的预期URI?

回答

1

要从应用程序设置锁定屏幕图像,您可能需要将您的应用程序声明为锁定屏幕提供程序。你可以做到这一点通过添加以下代码修改WMAppManifest.xml文件:

<Extensions> 
    <Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" /> 
</Extensions> 

检查是否你在你的清单文件这个标签。

+0

谢谢,我已经这么做了。 – Matthew

+0

注意到,我放' ..'闭合'Token'标签像这样 ' <扩展EXTENSIONNAME = “LockScreen_Background” ConsumerID =下 “{111DFF24-AA15-4A96-8006-2BFF8122084F}” TaskID =“_ default”/> ' – Matthew

0

我希望这可以帮助您解决您的问题。

如果您的应用程序已安装,请确保它是背景图片提供程序。如果没有,则进入设置 - >锁定屏幕 - >背景并从列表中选择您的应用程序。

在计划方面:

1.声明该应用程序的应用程序清单文件 编辑WMAppManifest.xml与XML编辑器的意图,请确保以下扩展存在:

<Extensions> <Extension ExtensionName="LockScreen_Background" ConsumerID="{111DFF24-AA15-4A96-8006-2BFF8122084F}" TaskID="_default" /> </Extensions> 

2.编写代码来更改背景图像 以下是如何编写用于设置背景的代码的示例。

private async void lockHelper(Uri backgroundImageUri, string backgroundAction) 
     { 
      try 
      { 
       //If you're not the provider, this call will prompt the user for permission. 
       //Calling RequestAccessAsync from a background agent is not allowed. 
       var op = await LockScreenManager.RequestAccessAsync(); 
       //Check the status to make sure we were given permission. 
       bool isProvider = LockScreenManager.IsProvidedByCurrentApplication; if (isProvider) 
       { 
        //Do the update. 
        Windows.Phone.System.UserProfile.LockScreen.SetImageUri(backgroundImageUri); 
        System.Diagnostics.Debug.WriteLine("New current image set to {0}", backgroundImageUri.ToString()); 
       } 
       else { MessageBox.Show("You said no, so I can't update your background."); } 
      } 
      catch (System.Exception ex) { System.Diagnostics.Debug.WriteLine(ex.ToString()); } 
     } 

关于尤里斯,有很多选择,但要在头脑:

要使用您在您的应用程序附带的图像,使用MS-APPX:///

Uri imageUri = new Uri("ms-appx:///background1.png", UriKind.RelativeOrAbsolute); LockScreen.SetImageUri(imageUri); 

要使用存储在本地文件夹中的映像,请使用ms-appdata:/// local/shared/shellcontent 必须在之内或之下/ shared/shell内容子文件夹

Uri imageUri = new Uri("ms-appdata:///local/shared/shellcontent/background2.png", UriKind.RelativeOrAbsolute); LockScreen.SetImageUri(imageUri); 
+0

您还可以查看http://developer.nokia.com/Community/Wiki/Dynamic_Lock_Screen_for_Windows_Phone_8以获取正在运行的示例 – hmadrigal

相关问题