前提・実現したいこと
UWPのスタート画面へのピン留めについてですが、
以下のように、
Appクラスに定義しました。
C#
1 public async Task StartPinned(string uriString150_150, string uriString310_150, string uriString310_310) 2 { 3 string appName = "TestStartPinned"; 4 int zipCode = 0; 5 6 string tileId = appName + zipCode; 7 8 string displayName = appName; 9 10 string arguments = "action=viewCity&zipCode=" + zipCode; 11 12 SecondaryTile tile = new SecondaryTile( 13 tileId, 14 displayName, 15 arguments, 16 new Uri(uriString150_150), 17 TileSize.Default); 18 19 tile.VisualElements.Wide310x150Logo = new Uri(uriString310_150); 20 tile.VisualElements.Square310x310Logo = new Uri(uriString310_310); 21 22 bool isPinned = SecondaryTile.Exists(tileId); 23 if (!isPinned) 24 { 25 bool isPinned2 = await tile.RequestCreateAsync(); 26 } 27 28 } 29 30 /// <summary> 31 /// アプリケーションがエンド ユーザーによって正常に起動されたときに呼び出されます。他のエントリ ポイントは、 32 /// アプリケーションが特定のファイルを開くために起動されたときなどに使用されます。 33 /// </summary> 34 /// <param name="e">起動の要求とプロセスの詳細を表示します。</param> 35 protected async override void OnLaunched(LaunchActivatedEventArgs e) 36 { 37 Frame rootFrame = Window.Current.Content as Frame; 38 39 // ウィンドウに既にコンテンツが表示されている場合は、アプリケーションの初期化を繰り返さずに、 40 // ウィンドウがアクティブであることだけを確認してください 41 if (rootFrame == null) 42 { 43 // ナビゲーション コンテキストとして動作するフレームを作成し、最初のページに移動します 44 rootFrame = new Frame(); 45 46 rootFrame.NavigationFailed += OnNavigationFailed; 47 48 if (e.PreviousExecutionState == ApplicationExecutionState.Terminated) 49 { 50 //TODO: 以前中断したアプリケーションから状態を読み込みます 51 } 52 53 // フレームを現在のウィンドウに配置します 54 Window.Current.Content = rootFrame; 55 } 56 57 if (e.PrelaunchActivated == false) 58 { 59 if (rootFrame.Content == null) 60 { 61 await StartPinned( 62 "ms-appx:///Assets/Square150x150Logo.png" 63 , "ms-appx:///Assets/Wide310x150Logo.png" 64 , "ms-appx:///Assets/Square310x310Logo.png" 65 ); 66 67 // ナビゲーションの履歴スタックが復元されていない場合、最初のページに移動します。 68 // このとき、必要な情報をナビゲーション パラメーターとして渡して、新しいページを 69 // 作成します 70 rootFrame.Navigate(typeof(MainPage), e.Arguments); 71 } 72 // 現在のウィンドウがアクティブであることを確認します 73 Window.Current.Activate(); 74 } 75 }
このようにすれば、
アプリ起動時に
スタートにピン留めされていない場合、
"このタイルをスタートにピン留めしますか?"
はい or いいえでメッセージボックスが表示され、
はいを選択すると
スタートにピン留めされます。
ここでいいえを選択するとピン留めされずにアプリが起動するのですが、
アプリを終了し、
もう一度アプリを起動(スタートにはピン留めされていないので別の場所から)しようとすると、
最初の画面(スプラッシュ画面?)の状態のままになり、
メイン画面に切り替わりません。
この現象ははいを選択後、
スタートのピン留めを外して別の場所からアプリを起動した際も発生しました。
なにが起こっているのでしょうか?
またどうすれば改善することができるでしょうか?
情報不足ありましたら
ご指摘ください。
宜しくお願い致します。
確認できた現象
・OnLaunchedが実行されない
OnLaunchedの一番最初に
C#
1 protected async override void OnLaunched(LaunchActivatedEventArgs e) 2 { 3 await new MessageDialog($"{nameof(OnLaunched)} Start").ShowAsync();
を追加し、MessageDialogが表示されるようにしてみたところ、
ダイアログは表示されませんでしたので、
おそらくOnLaunchedも実行されていません。
・一定時間経過後に終了?
とりあえず最初の画面のままの状態でしばらく放置してみましたが、
一定時間?経過後にアプリは終了しました。
補足情報(FW/ツールのバージョンなど)
・OS バージョン Windows10
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/02/10 02:37