android wear のムダ知識

57
※※ 注意 ※※ Android Wear についてのムダな話をします。 30分間ムダな話にお付き合いください。 いやなら聞かなくていいんだよ?

Upload: satoshi-noda

Post on 21-Jun-2015

273 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Android Wear のムダ知識

※※ 注意 ※※

Android Wear についてのムダな話をします。

30分間ムダな話にお付き合いください。

いやなら聞かなくていいんだよ?

Page 2: Android Wear のムダ知識

Android Wear のムダ知識

日本Androidの会 神戸支部野田悟志

Page 3: Android Wear のムダ知識

ムダな話 その1

名前:

 野田悟志

 @scarviz ←実はもう使ってない

所属:

 日本Androidの会 神戸支部 ←実はまだあった

 GDG神戸←実はあった

Page 4: Android Wear のムダ知識

OK! Google!

Page 5: Android Wear のムダ知識
Page 6: Android Wear のムダ知識
Page 7: Android Wear のムダ知識
Page 8: Android Wear のムダ知識

忘れてませんか?

Page 9: Android Wear のムダ知識
Page 10: Android Wear のムダ知識

…何が違うの?

Page 11: Android Wear のムダ知識
Page 12: Android Wear のムダ知識

なんとかせねば!

Page 13: Android Wear のムダ知識

'Difficult meeting' by Simon Blackley.CC BY-ND 2.0 http://goo.gl/Oh1LWu

Page 14: Android Wear のムダ知識

MediaRecorder

Page 15: Android Wear のムダ知識
Page 16: Android Wear のムダ知識

Mediarecorderstart failed -2147483648って超やる気のない例外…

Page 17: Android Wear のムダ知識

↑こんなのとか↑こんなのとか

Page 18: Android Wear のムダ知識

AV

Page 19: Android Wear のムダ知識

VideoView

Page 20: Android Wear のムダ知識
Page 21: Android Wear のムダ知識

VideoView(とMediaPlayer)Error: 1,-2147483648

MP4(H.264AVC)と3GPP(H.263)サイズは280×280に収まるようにリサイズ済み

Page 22: Android Wear のムダ知識

Media関連は呼べるけど

ダメっぽい…

Page 23: Android Wear のムダ知識

http://developer.android.com/intl/ja/training/wearables/apps/index.html

Page 24: Android Wear のムダ知識

Bluetoothで自由に

通信できる!

Page 25: Android Wear のムダ知識

Bluetooth機器を検出してみる

Page 26: Android Wear のムダ知識

これはBTヘッドホン→

Page 27: Android Wear のムダ知識

AndroidWearを検出させる

Page 28: Android Wear のムダ知識
Page 29: Android Wear のムダ知識

ActivityNotFoundExceptionで落ちる

BluetoothAdapter.ACTION_REQUEST_DISCOVERABLEでIntent

投げてもダメっぽい。

Page 30: Android Wear のムダ知識

'Thinker @ U of L' by Angela http://goo.gl/isFoTCCC BY-NC-ND 2.0

Page 31: Android Wear のムダ知識

Bluetooth機器として検出されるかどうかは問題じゃない

Page 32: Android Wear のムダ知識

これで何がしたいかが

問題なんだ

Page 33: Android Wear のムダ知識

http://www.android.com/wear/

Page 34: Android Wear のムダ知識

Android4.0

Page 35: Android Wear のムダ知識

僕もみんなみたいに

「Notificationめっちゃ便利!」

って言ってみたいんだよ!

Page 36: Android Wear のムダ知識

AccessibilityServiceで拾う

Notification発生

BluetoothServiceで通信

↑まずはここ

Notificationを発生させる

Page 37: Android Wear のムダ知識

Bluetooth通信の流れ

BT接続する

Notification情報を送る

スマートフォンをWearが検出する

Page 38: Android Wear のムダ知識

BluetoothAdapter.ACTION_REQUEST_DISCOVERABLEでIntentを投げる

BluetoothSocket.getOutputStreamでNotification情報を書き込む

端末のアドレスからBluetoothAdapter.getRemoteDeviceで、BluetoothDeviceを取得し、createRfcommSocketToServiceRecordで通信できるようにする

IntentFilterとBroadcastReceiverを登録し、BluetoothAdapter.startDiscoveryメソッドで端末を見つける

BluetoothSocket.getInputStreamでNotification情報を読み込む

これらのBluetooth通信はServiceで行う

BluetoothAdapter.listenUsingRfcommWithServiceRecordでBluetoothServerSocketを取得し、acceptで接続を待ち受ける

Page 39: Android Wear のムダ知識

AccessibilityServiceで拾う

Notification発生

BluetoothServiceで通信

↑できた

Notificationを発生させる←つぎここ

Page 40: Android Wear のムダ知識

NotificationはAccessibilityServiceで拾う

とはいったものの…

Page 41: Android Wear のムダ知識

Notification情報がどういう形式でくるのか

全然わかんない

Page 42: Android Wear のムダ知識

欲しい情報

1. タイトル2. アイコン3. テキスト4. パッケージ名(グループ名にする)

Page 43: Android Wear のムダ知識

AccessibilityEvent.getParcelableDataから、RemoteViewでNotificationのレイアウト取得

ここからリソースIDにandroid.R.id.title指定タイトルを取得

1. タイトル

Page 44: Android Wear のムダ知識

タイトルと同じくNotificationのレイアウトから取得する

リソースIDにandroid.R.id.icon指定アイコンを取得

PackageManager.getApplicationIconでアプリアイコンの方が良さそう

2. アイコン

Page 45: Android Wear のムダ知識

AccessibilityEvent.getTextでテキストを取得

これはTickerに設定されている文字列

NotificationのレイアウトからリソースIDにandroid.R.id.textなどを指定しても空っぽ

3. テキスト

Page 46: Android Wear のムダ知識

AccessibilityEvent.getPackageNameでパッケージ名を取得

4. パッケージ名

Page 47: Android Wear のムダ知識

Notification以外にも色々飛んでくる

Page 48: Android Wear のムダ知識

accessibility_service.xmlを用意してandroid:accessibilityEventTypesに

"typeNotificationStateChanged"を設定

Page 49: Android Wear のムダ知識

GooglePlayストアの通知や、アップデート可能アプリからの通知は受け取る

それ以外のシステム(プリインストール)のものは無視する

if(!packageName.startsWith("com.android.vending")&& ((ai.flags & ApplicationInfo.FLAG_UPDATED_SYSTEM_APP) == 0)&& ((ai.flags & ApplicationInfo.FLAG_SYSTEM) != 0)) {

// これらは無視する

}

aiはApplicationInfo(PackageManagerからApplicationInfoを取得)

Notificationの選別

Page 50: Android Wear のムダ知識

AccessibilityServiceで拾う

Notification発生

BluetoothServiceで通信

↑できた

Notificationを発生させる←できた

受け取った情報をNotification.Builder

に詰めるだけ ↓

Page 51: Android Wear のムダ知識

Notification.Builder notification = new Notification.Builder(this).setSmallIcon(R.drawable.ic_launcher).setContentTitle(notifyInfo.Title).setContentText(notifyInfo.Text).setGroup(notifyInfo.GroupName).setStyle(new Notification.BigPictureStyle()

.bigPicture(notifyInfo.Icon));

((NotificationManager) getSystemService(NOTIFICATION_SERVICE)).notify(GetNotifyId(), notification.build());

こんな感じ

←bigPictureに設定する

Page 52: Android Wear のムダ知識

Notificationを送ってみる

Page 53: Android Wear のムダ知識
Page 54: Android Wear のムダ知識

できた!!

Page 55: Android Wear のムダ知識

Android4.0以降とAndroidWearをBluetooth経由で通知するサンプル

https://github.com/scarviz/SampleBTNotification

Page 56: Android Wear のムダ知識
Page 57: Android Wear のムダ知識

ご清聴ありがとうございました!