エクスポート (0) 印刷
すべて展開
情報
要求されたトピックは次のとおりです。しかし、このトピックはこのライブラリには含まれていません。

Windows Phone 8 のロック画面の背景

2014/06/18

対象: Windows Phone 8 および Windows Phone Silverlight 8.1 のみ

Windows Phone 8 では、ユーザーが特定のアプリケーションを選択し、ロック画面の背景イメージ プロバイダーとして使用できます。

Lock Screen Background Area

アプリで電話のロック画面の背景イメージを提供するには、アプリ マニフェスト ファイルでアプリのインテントを宣言し、背景イメージの変更を処理するコードを追加する必要があります。

このトピックは、次のセクションで構成されています。

電話のロック画面の背景イメージを提供するには、まずアプリ マニフェスト ファイルを更新して、アプリをロック画面の背景プロバイダーとして宣言する必要があります。

  1. ソリューション エクスプローラーで、[プロパティ] を展開します。WMAppManifest.xml ファイルを右クリックし、[ファイルを開くアプリケーションの選択] をクリックして、[エンコード付きソース コード (テキスト) エディター] をクリックします。

  2. <Extensions> 要素に、ロック画面の背景の <Extension> 要素を追加します。<Extensions> 要素がファイルに表示されない場合は、下のコード例全体をファイルに追加してください。<Extensions> 要素は、<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:"));
}

表示:
© 2015 Microsoft