2016年2月20日土曜日

ファイル/フォルダのパスを保存したい

ピッカーなんかで選択したパスを次の起動時に扱いたいと言う話
結論を言うとパスを保存してもそれからファイル/フォルダを開く方法が無いので無理
代わりに
ファイルを表すWindows.Storage.StorageFile
フォルダを表すWindows.Storage.StorageFolder
で書込読込する
ピッカーで取得出来るものもこれ


方法
 読込
  var ファイル =
   await StorageApplicationPermissions.FutureAccessList.GetFileAsync("ファイルトークン")
  var フォルダ =
   await StorageApplicationPermissions.FutureAccessList.GetFolderAsync("フォルダトークン")

 書込
   StorageApplicationPermissions.FutureAccessList.AddOrReplace(
    "ファイル/フォルダ トークン", ファイル/フォルダ, "");

 名前空間はWindows.Storage.AccessCache.StorageApplicationPermissions
  トークンは読込と書込が一致していればいいのでStorageFile/Folderのメンバをnameof()すると良
  ただしMSはStorageApplicationPermissions.FutureAccessList.Addで帰ってくるトークン使用を推奨している模様

参考資料
  http://www.atmarkit.co.jp/ait/articles/1308/08/news071.html
  https://msdn.microsoft.com/ja-jp/library/windows/apps/windows.storage.accesscache.storageapplicationpermissions

2015年12月10日木曜日

コンパイル時ILT0005が発生する +2016/03/06追記

原因
 プロジェクトのパスにASCII文字以外の文字が入っている、特にユーザー名
 .Net NativeがASCII文字にしか対応していないからのようだ

解決方法
 解決方法は二つ
 パスをASCII文字のみにする
  .Net Nativeを使用しない
  プロジェクトのプロパティ→ビルド→.Net ネイティブ ツール チェーンでコンパイルする のチェックを外す

.Net Nativeについてはここが分かりやすかった
https://ufcpp.wordpress.com/2014/04/03/net-native/


2016/03/06 追記
.Net Nativeの文字コード対応したみたいです。使用できることを確認できました

2015年11月19日木曜日

メモ:最小化した際の動作

最小化して時間を置いた後アクティブ化するとWindows.UI.Xaml.Controls.Pageが開き直される
通常意識する必要はないが場合によってはバグの元になる可能性があるので注意

2015年11月8日日曜日

Windows.UI.Xaml.Controls.MediaElementを使用して再生した時、最小化すると再生停止する

原因
元々の仕様

解決方法
MediaElement.AudioCategoryにBackgroundCapableMediaを指定した後
どこでもいいので以下のコードを書く
var smtc = Windows.Media.SystemMediaTransportControls.GetForCurrentView();
smtc.IsPlayEnabled = true;
smtc.IsPauseEnabled = true;
smtc.IsStopEnabled = true;
最後にマニフェストでバックグラウンドタスクをオーディオで宣言する

ただしこの方法ではモバイルデバイスで停止してしまうかも
詳細はこちら
http://stackoverflow.com/questions/28185424/windows-store-apps-playing-background-audio-with-mediaelement

参考資料
https://msdn.microsoft.com/ja-jp/library/windows/apps/windows.ui.xaml.controls.mediaelement.audiocategory

2015年10月25日日曜日

Windows.UI.Xaml.Controls.Flame.Navigateが重い

原因 
 Windows.UI.Xaml.Controls.PageはNavigateされると毎回インスタンスを生成するため。
  (私の環境だと250ミリ秒前後かかっていた)

対処
 PageのNavigationCacheModeをRequiredもしくはEnabledを指定する。
 Pageをキャッシュするようになる為インスタンス生成が発生せず解決する。