Hatena::ブログ(Diary)

がりらぼWP7 ~WindowsPhoneプログラミング情報発信ラボ~

2012-12-15

2012-12-07

俺のアプリはUSBを挿すと動く


Windows 8 Store apps Advent Calendar7日目という事で
今年も年末になりましたね。がりっちです。

本年度は勉強会を主催させていただいたり、MSPフェローシップになれたり、東京でいろいろしたり楽しかった一年でした。

景気よく年末を迎えるために、アドベントカレンダーで一発よい記事を書こうとしたのですが...

なんと学校のテストが暴風警報により延期され、まさかのテスト期間中にアドベントカレンダーを書くことになりました。
なのでかなり雑なのをお許し下さい。

今回は"俺のアプリUSBを挿すと動く"ということでUSBをさした時に自動再生をするアプリをしようかなと

とりあえずまずはマニフェストファイルに
宣言→自動再生コンテンツに以下のようにします。
f:id:garicchi:20121207163729p:image

次にファイルの関連付けを以下のようにします
f:id:garicchi:20121207163727p:image

最後に機能のタブでリムーバル記憶領域にチェックを入れます
f:id:garicchi:20121207163726p:image

そして、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);
        }

Main.xaml.csには以下を

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-16

韓国に行ってきた話


やっと帰国
学校の研修旅行で韓国に行って来ました。

高校でいう修学旅行みたいなものなのですけどね。
うちには修学旅行はなくて4年目で初めて旅行がありました。

韓国いった率直な感想はジャパン素晴らしいですね。
韓国無勉強で行ったのもあれですが地下鉄乗りづらいとか
韓国語わからんとか、とにかく大変でした。

でも飯はうまい
f:id:garicchi:20121115173503j:image:w360

毎日腹いっぱい食べさせてもらいました。

あとは空港にタイルUIの店があったこと
f:id:garicchi:20121113103419j:image:w360

ホテルでテレビ見てたら韓国語Windows8のCMが流れてたことですかね。
f:id:garicchi:20121115095523j:image:w360

まあいろいろあったけど面白かった旅行でした。

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を消すと解決