2015年6月21日日曜日

Fragmentでバックキーイベントを拾う際の注意点

Fragmentでバックキーが押されたことを検知したくてこちらのサイトに紹介してある方法と同じように実装をしてみた。
しかし、バックキーが押されたイベントを拾うことができなかった。

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.myfragment, container, false);

    view.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN)
                Log.w(TAG, “on pressed back key”);
            return false;
        }

    });

    view.setFocusableInTouchMode(true);

    return view;
}

もっとよく調べてみると、バックキー等のハードウェアキーのイベントを拾うためにはそのViewにフォーカスが当たっている必要があることがわかった。
テキストエディット等はタッチすればフォーカスが当たるがFragmentは別の方法でフォーカスを当てる必要がある。

  • 方法1:レイアウトファイルに書いたFragmentの属性にandroid:focusable = "true"を入れる
  • 方法2:javaのコード上でrequestForcus()を呼ぶ

したがって、先ほどのコードは下記のように書く必要がある。

 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {

    View view = inflater.inflate(R.layout.myfragment, container, false);

    view.setOnKeyListener(new View.OnKeyListener() {
        @Override
        public boolean onKey(View v, int keyCode, KeyEvent event) {
            if (keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN)
                Log.w(TAG, “on pressed back key”);
            return false;
        }

    });

    view.setFocusableInTouchMode(true);
    view.requestFocus();

    return view;
}

2015年6月14日日曜日

Copy as cURL に感動

ウェブページの内容をスクリプトで解析したいということがよくある。
当然結果はcurl等のコマンドラインツールで実行したテキストの形式で受け取りたい。
なので、ブラウザで送るリクエストと同等のものをcurlのオプションや引数の設定をして作らなければならない。

いままではchromeの開発ツールにあるNetworkタグのリクエスト内容を見て位置からコマンドを作っていた。

ふと、リクエストを右クリックしてみると"Copy as cURL"なるものがあった。


まさかと思い試してみると、期待通りcurlのコマンドが!
curl 'http://seica.info/search/hinmoku.aspx' -H 'Cookie: ASP.NET_SessionId=hu2sjzkjdvf2ll3emwmw4xyv; __utmt=1; __utma=19271098.1453152246.1434261901.1434261901.1434261901.1; __utmb=19271098.16.10.1434261901; __utmc=19271098; __utmz=19271098.1434261901.1.1.utmcsr=naro.affrc.go.jp|utmccn=(referral)|utmcmd=referral|utmcct=/nfri/contens/open-db/' -H 'Origin: http://seica.info' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: ja,en-US;q=0.8,en;q=0.6' -H 'User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/43.0.2357.124 Safari/537.36' -H 'Content-Type: application/x-www-form-urlencoded' -H 'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8' -H 'Cache-Control: max-age=0' -H 'Referer: http://seica.info/search/hinmoku.aspx' -H 'Connection: keep-alive' --data '__EVENTTARGET=&__EVENTARGUMENT=&__LASTFOCUS=&__VIEWSTATE=%2FwEPDwUKLTE2NzE0NTU5O...(略)

おそらくweb開発をやっている方からすると当たり前の機能なのでしょうか、
私は・・・感動しました!

2015年6月13日土曜日

AndroidアプリWhat's This公開

以前に作ったアプリの知見を生かしつつ、新しい技術を取り入れることを目標としてWhat's Thisというアプリを作りました。

【ざっくりとした使い方と機能】
・ユーザが事前に任意の画像に対してアプリより対象物の指定と名前、よみがなの設定を行う
・設定後の画像の対象物をユーザがタッチすると、名前が表示され、よみがなが音声として流れる


子供がものの名前を覚えるときに使ったり、人の名前を覚えるときに使って貰えればと思っています。
ご興味がありましたら是非使ってみてください。

https://play.google.com/store/apps/details?id=com.nsunrize.whatsthis&hl=ja