(2011-02の一覧)
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
2011-02-17 Thu (他の年の同じ日: 2005 2006)
ボリューム変更ハードキーのハンドリング
2011-02-17-2 / カテゴリ: [Android] / [permlink]
動作確認用アプリなんかで手抜きをしたい^a^k上下スクロールとかズームイン/アウトなんかにキー操作を割り当てしたい場合に。
標準だと「押す:ボリューム変更&UI表示 / 離す:通知音を鳴らす」という動作のため、KEYCODE_VOLUME_UPとKEYCODE_VOLUME_DOWNの両方をフックする必要がある。
というわけで、こんな感じ。
Androidでキー長押しはACTION_DOWNがコールバックされまくるんだな。
参考
キーイベントに応答するには - 逆引きAndroid入門
ハードキーフックの方法 - 明日の鍵
標準だと「押す:ボリューム変更&UI表示 / 離す:通知音を鳴らす」という動作のため、KEYCODE_VOLUME_UPとKEYCODE_VOLUME_DOWNの両方をフックする必要がある。
というわけで、こんな感じ。
@Override public boolean dispatchKeyEvent(KeyEvent event) { switch (event.getAction()) { case KeyEvent.ACTION_DOWN: switch (event.getKeyCode()) { case KeyEvent.KEYCODE_VOLUME_UP: // ここにボリュームupが押されたときに走らせたい処理 return true; case KeyEvent.KEYCODE_VOLUME_DOWN: // ここにボリュームdownが押されたときに走らせたい処理 return true; default: break; } break; case KeyEvent.ACTION_UP: switch (event.getKeyCode()) { case KeyEvent.KEYCODE_VOLUME_UP: case KeyEvent.KEYCODE_VOLUME_DOWN: // キーが離された場合はイベントを捨てる return true; default: break; } break; default: break; } return super.dispatchKeyEvent(event); }
Androidでキー長押しはACTION_DOWNがコールバックされまくるんだな。
参考
キーイベントに応答するには - 逆引きAndroid入門
ハードキーフックの方法 - 明日の鍵
find|xargsでスペース込みのパスが有る場合
2011-02-17-1 / カテゴリ: [linux][command] / [permlink]
$ find path [opt] -print0 | xargs -0 commandでGo
これで、findの結果が\0区切りになり、xargsのデリミタの扱いが\0になる。
http://linuxjm.sourceforge.jp/html/GNU_findutils/man1/xargs.1.html
例: "a b.txt" がある場合
zaki@salva% find . -name "*txt" [~/tmp/path] ./a b.txt ./a.txt ./b.txt ./sub/a b.txt ./sub/a.txt ./sub/b.txtこんなディレクトリ構成の場合("a b.txt"がある)
zaki@salva% find . -name "*txt" | xargs file [~/tmp/path] ./a: ERROR: cannot open `./a' (No such file or directory) b.txt: empty ./a.txt: empty ./b.txt: empty ./sub/a: ERROR: cannot open `./sub/a' (No such file or directory) b.txt: empty ./sub/a.txt: empty ./sub/b.txt: empty"a"とか"b.txt"なんかねーよといわれる。
これは、findの結果が改行区切りで出力されるためで、更にxargsが改行とスペースを区切りとみなしているため。
zaki@salva% find . -name "*txt" | od -c [~/tmp/path] 0000000 . / a b . t x t \n . / a . t x 0000020 t \n . / b . t x t \n . / s u b / 0000040 a b . t x t \n . / s u b / a . 0000060 t x t \n . / s u b / b . t x t \n 0000100んで、-print0を付加してやると
zaki@salva% find . -name "*txt" -print0 | od -c [~/tmp/path] 0000000 . / a b . t x t \0 . / a . t x 0000020 t \0 . / b . t x t \0 . / s u b / 0000040 a b . t x t \0 . / s u b / a . 0000060 t x t \0 . / s u b / b . t x t \0 0000100区切りが\0に変わる。
で、xargs -0 で本来「スペース/改行区切りで」ファイル名を拾う動作が、\0区切りになる、と。
zaki@salva% find . -name "*txt" -print0 | xargs -0 file [~/tmp/path] ./a b.txt: empty ./a.txt: empty ./b.txt: empty ./sub/a b.txt: empty ./sub/a.txt: empty ./sub/b.txt: empty
そもそもスペース込みのファイル名やディレクトリ名をつけるな、という話。
xargs(1)
find(1)
2013 : 01 02 03 04 05 06 07 08 09 10 11 12
2012 : 01 02 03 04 05 06 07 08 09 10 11 12
2011 : 01 02 03 04 05 06 07 08 09 10 11 12
2010 : 01 02 03 04 05 06 07 08 09 10 11 12
2009 : 01 02 03 04 05 06 07 08 09 10 11 12
2008 : 01 02 03 04 05 06 07 08 09 10 11 12
2007 : 01 02 03 04 05 06 07 08 09 10 11 12
2006 : 01 02 03 04 05 06 07 08 09 10 11 12
2005 : 01 02 03 04 05 06 07 08 09 10 11 12
2004 : 01 02 03 04 05 06 07 08 09 10 11 12
最終更新時間: 2013-05-02 16:12