2012-12-07
俺のアプリはUSBを挿すと動く
Windows 8 Store apps Advent Calendar7日目という事で
今年も年末になりましたね。がりっちです。
本年度は勉強会を主催させていただいたり、MSPフェローシップになれたり、東京でいろいろしたり楽しかった一年でした。
景気よく年末を迎えるために、アドベントカレンダーで一発よい記事を書こうとしたのですが...
なんと学校のテストが暴風警報により延期され、まさかのテスト期間中にアドベントカレンダーを書くことになりました。
なのでかなり雑なのをお許し下さい。
今回は"俺のアプリはUSBを挿すと動く"ということでUSBをさした時に自動再生をするアプリをしようかなと
とりあえずまずはマニフェストファイルに
宣言→自動再生コンテンツに以下のようにします。
次にファイルの関連付けを以下のようにします
最後に機能のタブでリムーバル記憶領域にチェックを入れます
そして、App.xaml.csに以下を追加します
protected override void OnFileActivated(FileActivatedEventArgs args) { if (args.Verb == "show") { Frame rootFrame = (Frame)Window.Current.Content; var mainPage = (MainPage)rootFrame.Content; // Call DisplayImages with root folder from camera storage. mainPage.FileLaunch((Windows.Storage.StorageFolder)args.Files[0]); } base.OnFileActivated(args); }
public async void FileLaunch(StorageFolder file) { MessageDialog dialog = new MessageDialog(file.DisplayName); await dialog.ShowAsync(); }
これでアプリを実行して、ルートフォルダにDCIMフォルダのあるUSBを指すと....
なんとUSBの名前が表示されます。
ごめんなさい。これだけです。
【今回わかったこと】
リムーバルデバイス自動再生はApp.xaml.csのonFileActivatedをオーバーライドする
その時マニフェストに書いてある動詞で条件分けをする
StorageFolderが取得できる。
USBをさして中の画像一覧列挙とかもできそうで面白そうですね!!
明日はきっと素晴らしい記事を書いていただけると思います
雑でごめんなさい
さてテスト勉強をしないと...
2012-11-05
MetroDevelopersJapanに参加しました
Metro...いい名前ですね。
FaceBookのグループに
Metro Developers Japanというグループがあったので
参加しちゃいました。
非常に新鮮な情報が入ってきそうですね!!
僕も積極的に投稿したいと思います。
2012-11-02
キーが押されたことを検知する
キー判定が若干変わってました
.Net時代は確かKeys列挙体で判定してたのですが
WinRTではVirtualKey列挙体みたいです。
キー押した瞬間判定
private void Button1_KeyDown(object sender, KeyRoutedEventArgs e) { if (e.Key == VirtualKey.Enter) { //押された } }
キー押したあと上げた瞬間判定
private void Button1_KeyUp(object sender, KeyRoutedEventArgs e) { if (e.Key == VirtualKey.Enter) { //押された } }
VirtualKeyは列挙体なので
変えて判定しましょう。
URLエンコード、デコードする
日本語検索とかするときはURLをエンコードしなければいけませんね
エンコード
string url = Uri.EscapeUriString("日本語のURL");
string url=Uri.UnescapeDataString("エンコードされたURL");
GridViewを使うと出る謎のバグ
WinRTに限ったことではないのですがすごく積んだのでメモ
GridViewを使うと時々
型 'Windows.UI.Xaml.Markup.XamlParseException' の例外が QuickSearch.exe で発生しましたが、ユーザー コード内ではハンドルされませんでした
WinRT 情報: E_UNKNOWN_ERROR [Line: 65 Position: 31]
追加情報: エラーを特定できません
この例外のハンドラーがある場合は、プログラムを安全に続行できます。
というメッセージが出てきます。
エラーメッセージだけでは何も特定できないのですが
どうやら、SelectedIndexを0にしているのが間違ってるみたいです。
SelectedIndexを指定するのは悪くないのですが
アイテムをBindingでデータバインドしているせいだそうです。
データバインドしていると、SelectedIndexを指定してはいけないみたいです。
とりあえずSelectedIndexを消すと解決