信息
您所需的主题如下所示。但此主题未包含在此库中。

Windows Phone 8 的锁屏界面背景

2014/6/18

仅适用于:Windows Phone 8 和 Windows Phone Silverlight 8.1

在 Windows Phone 8 中,用户可以选择将应用用作锁屏界面背景图像提供程序。

Lock Screen Background Area

为使您的应用能够在手机中提供锁屏界面背景图像,您需要在应用清单文件中声明应用的目的,并添加用于处理背景图像更改的代码。

本主题包括以下部分。

若要提供手机锁屏界面背景图像,首先您需要更新应用清单文件,以将您的应用声明为锁屏界面背景的提供程序。

  1. “解决方案资源管理器”中,展开“属性”,右键单击 WMAppManifest.xml,再单击“打开方式”,然后单击“带编码的源代码(文本编辑器)”

  2. <Extension> 元素中添加锁屏界面背景 <Extension> 元素。如果 <Extension> 元素没有在文件中出现,则将下面的整个代码示例置于文件中。<Extension> 元素必须置于 <Tokens> 元素之下。

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

以下代码示例演示当用户点击指定按钮时,您如何可以更改锁屏界面背景图像。

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());
    }
}

唯一的图像名称

如果您从独立存储中更新锁屏界面背景图像,每一次更新时,您都将需要提供唯一的文件名。可以实现这一点的简单方式是为文件名实现 A/B 切换逻辑。

以下代码演示 A/B 切换逻辑示例。

string fileName;
var currentImage = LockScreen.GetImageUri();

if (currentImage.ToString().EndsWith("_A.jpg"))
{
    fileName = "LiveLockBackground_B.jpg";
}
else
{
    fileName = "LiveLockBackground_A.jpg";
}

var lockImage = string.Format("{0}", fileName);

// At this point in the code, write the image to isolated storage.

在您的应用可以设置锁屏界面背景图像之前,用户可以在手机锁屏界面设置屏幕中将您的应用设置为默认锁屏界面图像提供程序。因此,您应在您的主要项目的 XAP 包的根上包括默认锁屏界面背景图像。将该图像命名为 DefaultLockScreen.jpg。

如果用户在手机锁屏界面设置屏幕中将您的应用设置为默认锁屏界面背景图像的提供程序,他们可能点击“打开应用”按钮,如下图所示。

Lock screen settings open app link

点击“打开应用”按钮将使用 QueryString 中的信息启动您的应用。为提供最佳的用户体验,您应针对该信息的处理而设计应用;例如,当应用更新图像时,您可以将用户引导到应用内的自定义锁屏界面设置屏幕,或显示信息:锁屏界面背景图像正在更新。

以下代码示例演示您如何可以在 OnNavigatedTo(NavigationEventArgs) 方法中查找 QueryString 信息。

protected override void OnNavigatedTo(System.Windows.Navigation.NavigationEventArgs e)
{
    base.OnNavigatedTo(e);

    string lockscreenKey = "WallpaperSettings";
    string lockscreenValue = "0";

    bool lockscreenValueExists = NavigationContext.QueryString.TryGetValue(lockscreenKey, out lockscreenValue);

    if (lockscreenValueExists)
    {
        // Navigate the user to your app's lock screen settings screen here, 
        // or indicate that the lock screen background image is updating.
    }
}

为您的应用用户的便利着想,请考虑从您的应用内添加指向手机的锁屏界面设置屏幕的链接。这对您的用户非常有用,因为您无法以编程方式从应用内关闭作为应用内的锁屏界面背景图像提供程序的应用。用户需要访问手机的设置屏幕并自行作出更改。提供指向设置屏幕的链接使此操作直观且简单。

下面的代码示例向您演示如何将按钮单击路由到手机的锁屏界面设置屏幕。

private async void btnGoToLockSettings_Click(object sender, RoutedEventArgs e)
{
    // Launch URI for the lock screen settings screen.
    var op = await Windows.System.Launcher.LaunchUriAsync(new Uri("ms-settings-lock:"));
}

显示: