俺がライダーだ

26
俺がライダーだ @kassy_kz 2013/9/14 名古屋 つ部 勉強会 LT 2013914日土曜日

Upload: kazutoshi-kashimoto

Post on 31-May-2015

1.297 views

Category:

Documents


0 download

DESCRIPTION

名古屋 つ部 勉強会 2013年9月 の発表資料です

TRANSCRIPT

Page 1: 俺がライダーだ

俺がライダーだ

@kassy_kz

2013/9/14 名古屋 つ部 勉強会 LT

2013年9月14日土曜日

Page 2: 俺がライダーだ

Effective Android

• 私も少し書かせてもらった

• β版発売中

(宣伝)

http://bit.ly/16WlWeZ

2013年9月14日土曜日

Page 3: 俺がライダーだ

自己紹介• 名前: かっしー    (@kassy_kz)    (神奈川県)

• 特徴: 健全    とても健全

• 趣味: 自転車    ライダーのサーヴァント(社畜)

2013年9月14日土曜日

Page 4: 俺がライダーだ

自転車たのしい✌('ω'✌ )三✌('ω')✌三( ✌'ω')✌

2013年9月14日土曜日

Page 5: 俺がライダーだ

重度の迷子クラスタです

ところが. . .

2013年9月14日土曜日

Page 6: 俺がライダーだ

スマートフォンをマウント

これで迷子の心配ナシ!2013年9月14日土曜日

Page 7: 俺がライダーだ

ところが

グローブはめると操作できない2013年9月14日土曜日

Page 8: 俺がライダーだ

新開発

NFCウィザードグローブ

NFCタグ

NFCタグNFCタグ

NFCタグ NFCタグNFCタグ

NFCタグ

NFCタグ

NFCタグ NFCタグ

全指先にNFCタグを貼り付け2013年9月14日土曜日

Page 9: 俺がライダーだ

10本のNFCタグを駆使して

タッチパネルを使わずにスマホを操作する

これぞ お触り禁止 な端末操作け ん ぜ ん

2013年9月14日土曜日

Page 10: 俺がライダーだ

NFC操作で できること 1

• 任意のアプリの起動• AndroidApplicationRecordという種類のタグを

書き込んでおけば、OSがアプリを起動してくれる

• どのアプリでも起動可能

アプリ起動

2013年9月14日土曜日

Page 11: 俺がライダーだ

NFC操作で できること 2

• URIを飛ばす→アプリが受け取る

• 任意のURLにジャンプなどが可能

• AndroidManifestにURIを受け取る定義が必要

URI取得

2013年9月14日土曜日

Page 12: 俺がライダーだ

ウィザードグローブ対応地図アプリ作った

• Google Maps API V2を使用

• NFCをかざすと - 現在地へ移動 - スクロール - 拡大縮小が可能

2013年9月14日土曜日

Page 13: 俺がライダーだ

ところが . . .

Maps API V2ではルート案内ができない. . .

川崎駅どこ?

2013年9月14日土曜日

Page 14: 俺がライダーだ

NFCだけでGoogle Maps アプリを操作したい

2013年9月14日土曜日

Page 15: 俺がライダーだ

NFCでタッチパネルを操作する秘策

2013年9月14日土曜日

Page 16: 俺がライダーだ

基本構成

アプリ

Android OS

一般アプリ(GoogleMaps)

デバイスドライバ

通常タッチイベント 偽タッチイベント NFC

特権アプリ(要Root)

今回開発

2013年9月14日土曜日

Page 17: 俺がライダーだ

コード

<uses-permission android:name="android.permission.INJECT_EVENTS"/>

AndroidManifest.xml

とても危険なパーミッションです。このパーミッションを宣言しただけでAndroidSDKはビルドを拒んできます

2013年9月14日土曜日

Page 18: 俺がライダーだ

コード/** * 単純なタップを再現するタスク **/public static class SimpleTapEventSender extends AsyncTask<Integer, Integer, Integer> {

@Override protected Integer doInBackground(Integer... params) { Log.i(TAG, "pushsync aaa"); if(params.length < 2 ) return null; Instrumentation ist = new Instrumentation(); MotionEvent event;

event = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, params[0], params[1], 0); ist.sendPointerSync(event); wait_msec(300); event = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, params[0], params[1], 0); ist.sendPointerSync(event); return null; }}

単純なタップイベントを発生させるコード2013年9月14日土曜日

Page 19: 俺がライダーだ

コード/** * ムーブイベントを再現するタスク **/public static class SlideEventSender extends AsyncTask<Integer, Integer, Integer> { @Override protected Integer doInBackground(Integer... params) { if(params.length < 4 ) return null; int count = 20; // Down Instrumentation ist = new Instrumentation(); MotionEvent event = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_DOWN, params[0], params[1], 0); ist.sendPointerSync(event); wait_msec(300); // Move for(int i=0; i<count; i++) { MotionEvent event21 = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_MOVE, ((count - i) * params[0] + i * params[2]) / count, ((count - i) * params[1] + i * params[3]) / count, 0); ist.sendPointerSync(event21); wait_msec(100); } // Up MotionEvent event3 = MotionEvent.obtain(SystemClock.uptimeMillis(), SystemClock.uptimeMillis(), MotionEvent.ACTION_UP, params[2], params[3], 0); ist.sendPointerSync(event3); return null; }}

スライドイベントを発生させるコードhttp://bit.ly/18k7CUp

2013年9月14日土曜日

Page 20: 俺がライダーだ

NFCウィザードグローブ動作デモ

2013年9月14日土曜日

Page 21: 俺がライダーだ

このNFCウィザードグローブで

俺は最強の健全ライダーになる

2013年9月14日土曜日

Page 22: 俺がライダーだ

ところが

こんな商品が・・・http://bit.ly/tXgOJX

2013年9月14日土曜日

Page 23: 俺がライダーだ

あれ...

2013年9月14日土曜日

Page 24: 俺がライダーだ

僕の苦労は.... 存在意義は...

2013年9月14日土曜日

Page 25: 俺がライダーだ

絶望が俺のゴールだ

2013年9月14日土曜日

Page 26: 俺がライダーだ

申し訳ありませんでした

発表は以上ですご静聴ありがとうございました

2013年9月14日土曜日