函館IKA ICS開発情報
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

函館IKA ICS開発情報

on

  • 3,278 views

 

Statistics

Views

Total Views
3,278
Views on SlideShare
3,266
Embed Views
12

Actions

Likes
7
Downloads
10
Comments
0

2 Embeds 12

http://us-w1.rockmelt.com 11
http://twicli.neocat.jp 1

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

函館IKA ICS開発情報 Presentation Transcript

  • 1. ICS開発情報 @v vakameSaturday, March 24, 12
  • 2. Honeycomb • Fragment • Action Bar • Loader • Gamepad, Joypad • USB Host • ADK (Android Open Accessory Development Kit) 世間がスルーwSaturday, March 24, 12
  • 3. Ice Cream Sandwich • Action Provider • Android Beam • Wi-Fi DirectSaturday, March 24, 12
  • 4. Compatibility Package • 一部、新APIの互換パッケージ有り • Android 1.6(Donuts) 以降に対応 • 以下のAPIが使えるよ! • 各種 Fragment • 各種 Loader Action Bar はありません。 • 各種 Adapter ActionBarSherlock というのがあります。 • MenuCompatSaturday, March 24, 12
  • 5. 3.0 Fragment 詳細はyanzm本2で! サンプルアプリも便利! 日経ソフトウェア3月号Saturday, March 24, 12
  • 6. Fragment • Android開発の新しい基本要素 • ライフサイクルイベントを持つ • 部品化されたActivity • ライブラリ化がしやすい 必修科目!!!Saturday, March 24, 12
  • 7. 構成の変化 今までの作り方 Activity View View View View ViewSaturday, March 24, 12
  • 8. 構成の変化 これからの作り方 Activity View有りFragment View View View View無しFragmentSaturday, March 24, 12
  • 9. 構成の変化 • ロジックを書く場所 • 今まではActivityに書いたり • これからはFragmentに書く! • ActivityはFragmentの交差点に • Fragmentは小型Activity的な役割Saturday, March 24, 12
  • 10. 使い方 (View有り) • スマホ・タブレット対応に便利 • 1Fragmentだけ表示=スマホ用 • 複数Frament表示=タブレット用 • ↑スマホで複数FragmentもありSaturday, March 24, 12
  • 11. 使い方 (View有り) <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/hello" /> こんだけ <fragment android:id="@+id/fragment" android:name="net.vvakame.hakodateika.SampleFragment" android:layout_width="match_parent" android:layout_height="wrap_content" /> </LinearLayout>Saturday, March 24, 12
  • 12. 使い方 (View有り)public class SampleFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.fragment, container); }} <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/this_is_fragment" /> </LinearLayout>Saturday, March 24, 12
  • 13. 使い方 (View無し) • ロジックのライブラリ化に便利 • ライフサイクルイベントあるからね! • プログラムからFragmentを追加してやる • onCreateView で null を返すとエラーSaturday, March 24, 12
  • 14. 使い方 (View無し) public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); { // Fragmentの作成と登録 SampleFragment fragment = new SampleFragment(); FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.add(fragment, "SampleFragment"); transaction.commit(); } } } compat 利用時は FragmentActgivityを継承Saturday, March 24, 12
  • 15. 使い方 (View無し) • ライブラリ化の例 • Android Beamの簡単ライブラリ化 • Activityに2つのinterfaceを実装 • AndroidManifestに少し書き足す • ↑これだけで簡単に利用可能!! 実際のコードを見てみますSaturday, March 24, 12
  • 16. Fragmentの差し替え • 画面遷移を表現することも可能 • FragmentManager とか • FragmentTransaction とかSaturday, March 24, 12
  • 17. addToBackStack public class MainActivity extends Activity implements OnClickListener { int mCount = 1; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); { // 初回は addToBackStackなし SampleFragment fragment = new SampleFragment("No." + mCount); FragmentTransaction tx = getFragmentManager().beginTransaction(); tx.replace(R.id.fragment_place, fragment).commit(); mCount++; } } @Override public void onClick(View v) { SampleFragment fragment = new SampleFragment("No." + mCount); FragmentTransaction tx = getFragmentManager().beginTransaction(); tx.replace(R.id.fragment_place, fragment).addToBackStack(null).commit(); mCount++; } } Backキーで1つ前のFragmentに戻れる!Saturday, March 24, 12
  • 18. おすすめイディオム • onAttach で独自コールバックを取得 public class SampleFragment extends Fragment { public interface OnSampleCallback { public void onXxx(); } public interface OnSampleCallbackPicker { public OnSampleCallback getOnSampleCallback(); } OnSampleCallback mCallback; @Override public void onAttach(Activity activity) { super.onAttach(activity); if (activity instanceof OnSampleCallbackPicker == false) { throw new ClassCastException( "activity が OnSampleCallbackPicker を実装していません."); } mCallback = ((OnSampleCallbackPicker) activity).getOnSampleCallback(); if (mCallback == null) { throw new NullPointerException("activityからcallbackが取得できませんでした"); } } }Saturday, March 24, 12
  • 19. おすすめイディオム • Activity で独自コールバックを実装 public class MainActivity extends Activity implements OnSampleCallbackPicker { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); { // Fragmentの作成と登録 SampleFragment fragment = new SampleFragment(); FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.add(fragment, "SampleFragment"); transaction.commit(); } } public OnSampleCallback getOnSampleCallback() { return new OnSampleCallbackImpl(); } class OnSampleCallbackImpl implements OnSampleCallback { public void onXxx() { } 複数Fragment利用時に } } 名前の衝突が少ないSaturday, March 24, 12
  • 20. おすすめイディオム • ActivityでコードからFragmentを差し 替える場合 public class MainActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); { // Fragmentの作成と登録 SampleFragment fragment = new SampleFragment(new OnSampleCallbackImpl()); FragmentManager manager = getFragmentManager(); FragmentTransaction transaction = manager.beginTransaction(); transaction.add(fragment, "SampleFragment"); transaction.commit(); } } class OnSampleCallbackImpl implements OnSampleCallback { public void onXxx() { } } Fragmentの使い回しが } よりやりやすくSaturday, March 24, 12
  • 21. Fragmentのライフサイクル Activity Fragment onAttach onCreate onCreate onCreateView onStart onActivityCreated onStart onResume onResume onPause onPause onStop onStop onDestroy onDestroyView onDestroy onDetachSaturday, March 24, 12
  • 22. よく使うやつ Activity Fragment onAttach onCreate onCreate onCreateView onStart onActivityCreated onStart onResume onResume onPause onPause onStop onStop onDestroy onDestroyView onDestroy onDetachSaturday, March 24, 12
  • 23. 3.0 ActionBar yanzm本2Saturday, March 24, 12
  • 24. これSaturday, March 24, 12
  • 25. Action Bar • 今まではMenuキー(ハードキー)だった • 機能があるか押すまでわからん… • じゃ、画面上に出せばよくね? • ↑たぶんGoogleはこう思ったSaturday, March 24, 12
  • 26. 使い方 • AndroidManifest.xml で… • targetSdkVersion を 11以上 • minSdkVersion を 11以上 • ↑どっちか!Saturday, March 24, 12
  • 27. ActionBarにできること • 今までのMenuと同じこと • Viewを配置したりできる • SplitActionBarで画面下に表示するこ ともできるSaturday, March 24, 12
  • 28. 3.0 Loader yanzm本2Saturday, March 24, 12
  • 29. Loader • AsyncTask のお利口さんVersion • AsyncTaskLoader • CursorLoader • 処理結果をキャッシュしてくれるSaturday, March 24, 12
  • 30. vs AsyncTask? • Loaderがよさそう • データ更新通知が受け取れるもの • AsyncTask がよさそう • 頻繁に更新されるもの • キャッシュの意味が薄いもの • 毎回実行されないと困るもの AsyncTask がいらなくなるわけじゃなさそうですSaturday, March 24, 12
  • 31. 3.1 Gamepad, Joypad もうすこし詳しい説明ありますSaturday, March 24, 12
  • 32. ゲーム用HID対応大幅強化 全部Joystick扱い Gamepadは...?Saturday, March 24, 12
  • 33. リッチなゲームも作れる • ActivityにGenericMotionEvent が追加 • on∼ とか dispatch∼ とか • ボタン系は従来通りKeyEvent • アナログ系はGenericMotionEvent • 一定期間の入力が一気に渡されるので MotionEvent#getHistoricalXXX 使う USB接続のKeyboardやMouseも サポートされたので幅がさらに↑↑Saturday, March 24, 12
  • 34. キーコンフィグだけ対応でもおk 既存のゲームも操作性大幅↑↑Saturday, March 24, 12
  • 35. 3.1 USB Host ADK とは違うのだよ! もうすこし詳しい説明ありますSaturday, March 24, 12
  • 36. USB Host? • 今までのAndroidはDevice側だった • マスストレージ とか • 今度のAndroidはHost側になれます! • ラベルプリンタを接続して印刷 • LEDディスプレーに図形表示 他 プロトコルが分かればなんでも出来る…!? デバイスメーカーさん、対応Androidアプリ開発いかがですか!Saturday, March 24, 12
  • 37. 実際にやってみた タカラトミー グリッターパネル http://amzn.to/glitterpanelSaturday, March 24, 12
  • 38. 3.1 ADKSaturday, March 24, 12
  • 39. ADK? • Androidはデバイス側 • ADKがホスト側 …なんか直感と逆! • Android 周辺機器が作れる • 2.3.4 以降対応のBackport有り アプリ連携も容易!ハード対応アプリが なければマーケットに飛ばしたりも可能 @magoroku15 先生の 資料がスゴい! RT社のADKボードSaturday, March 24, 12
  • 40. 4.0 ActionProvider yanzm本2Saturday, March 24, 12
  • 41. ActionProvider • ActionBar用の動作のライブラリ化 • 公式だと ShareActionProvider • 正直他にどう使えばいいのやら…? • 良い活用方法が思いついたら教えて!Saturday, March 24, 12
  • 42. 使い方 <?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android" > <item android:id="@+id/pick_action_provider" android:actionProviderClass="net.vvakame.applist.ApplicationActionProvider" android:icon="@android:drawable/ic_menu_send" android:showAsAction="always"/> </menu> ActionBar 実装クラスを指定しますSaturday, March 24, 12
  • 43. 4.0 Android Beam 日経ソフトウェア4月号 2.3本 NFCの章Saturday, March 24, 12
  • 44. Android Beam • NFC  • 端末タッチで簡単に通信可能 • でも転送速度は遅い 1KBが目安 • 端末間通信のための便利なAPI • かっこいいUI! • 送信先アプリ指定も可能!Saturday, March 24, 12
  • 45. NFC? • Near Field Communication の略 • FeliCa とか Kitaca, Suica みたいな奴 • 実は 2.3 時代からNFCのAPIはあった • 2.3.4 から書込/送信も可能に • Beam は OSとして使い方を示した!Saturday, March 24, 12
  • 46. Android Beam? • 主に端末 ←→ 端末の情報交換 • Youtubeアプリで見てる動画の共有 • 起動中アプリを相手側で起動 • 送信先アプリの指定が可能 (AAR) アプリにBeam用実装がない場合、 受信側で同じアプリを起動します。 なかったらマーケットへ飛びます。Saturday, March 24, 12
  • 47. 使い方 • AndroidManifest.xmlに書く • NfcAdapter経由でコールバックを登録 • NDEF を送って送受信する 実際のコードを見てみますSaturday, March 24, 12
  • 48. NDEFって何? • NFC Data Exchange Format の略 • NFCによるデータ交換はこの形式 • Beamするだけならテンプレコードでおk • 別に覚えなくても問題なし!Saturday, March 24, 12
  • 49. android.nfc.NdefMessage NdefMessage NdefRecord NdefRecord • NdefMessageは1つ以上のNdefRecordか ら構成される • 一般的には1レコードだけっぽいSaturday, March 24, 12
  • 50. android.nfc.NdefRecord NdefMessage NdefRecord NdefRecord MB ME CF SR IL TNF LENGTH INFO(TYPE, PAYLOAD, ID) BODY(TYPE, ID, PAYLOAD)Saturday, March 24, 12
  • 51. どう解釈するの? • TNFとTypeの値によってPayloadの解釈 の仕方が変わる • AndroidSDKに含まれるNFCDemoでは Text, Uri, SmartPosterに対応 • NFC RTD でぐぐれSaturday, March 24, 12
  • 52. 略語 • NFC Near Field Communication • NDEF NFC Data Exchange Format • MB Message Begin • ME Message End • CF Chunk Flag • SR Short Record • IL ID Length • TNF Type Name Format • RTD Record Type DefinitionSaturday, March 24, 12
  • 53. 4.0 Wi-FI Direct 今日発売! 日経ソフトウェア5月号Saturday, March 24, 12
  • 54. Wi-Fi Direct • 端末同士でWi-Fiで通信できる • 通信速度が早い • セキュア (WPA2, WPS) • 接続も比較的簡単… • フレームワークの品質が悪い!!!! • 2.3時代のNFCのAPIを見ているよう…Saturday, March 24, 12
  • 55. Wi-Fi Direct (仕様) • 機器同士で通信が可能 • APの助けとかはいらない • Ad hoc とは違う (通常の接続と両立) • Androidでは今のところ両立不可 • プリンタに直接接続して印刷とか • 今のとこOSは手伝ってくれないSaturday, March 24, 12
  • 56. Frameworkェ…! • OS巻き込んで落ちる • 切断→再接続 を3セットくらいで落ちる • 原稿書いてる途中10分に1回リブる • OS設定画面のON/OFFイジっただけで 落ちる • 使い物になるかァ!ヽ(`!´)ノSaturday, March 24, 12
  • 57. (´・ω・`) まだ製品品質じゃないね… こなれるのまとうか… 今後の進化は超楽しみです! 端末間通信は全部コレになるといいかもSaturday, March 24, 12
  • 58. 接続の流れ アプリの呼び出し処理 OSからの通知 ユーザにさせる操作 0. Wi-Fi Directを有効にする (WifiP2pManager.WIFI_P2P_STATE_CHANGED_ACTION がBroadcastされる) 1. WifiP2pManager#discoverPeers で接続可能なPeerを探す 2. WifiP2pManager.WIFI_P2P_PEERS_CHANGED_ACTION がBroadcastされてくる 3. WifiP2pManager#requestPeers で各Peerの情報をリクエストする 4. WifiP2pManager.PeerListListener#onPeersAvailable にコールバックが来る 5. 接続の前準備として、WifiP2pConfig を組み立てる WPSの指定など 6. WifiP2pManager#connect で指定したPeerに接続する 7. WifiP2pManager.WIFI_P2P_CONNECTION_CHANGED_ACTION がBroadcastされてくる 8. WifiP2pManager#requestConnectionInfo で接続情報をリクエストする 9. WifiP2pManager.ConnectionInfoListener#onConnectionInfoAvailable にコールバックが来る 10. 通信のための処理を行う(Socketを開き通信を行うなど) 11. WifiP2pManager#removeGroup を呼び出し接続を解除するSaturday, March 24, 12
  • 59. 必要な権限 <?xml version="1.0" encoding="utf-8"?> <manifest 略> <uses-sdk android:minSdkVersion="14" /> <!-- Wi-Fi Direct 接続確立 --> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <!-- 通信のためのソケットを開くまで --> <uses-permission android:name="android.permission.INTERNET" /> <uses-feature android:name="android.hardware.wifi.direct" /> 略 </manifest>Saturday, March 24, 12
  • 60. おすすめ書籍 • 第1章 Android 4.0(ICS) • 第2章 フラグメント • 第3章 アクションバー • 第4章 ノーティフィケーション • 第5章 アニメーション • 第6章 アプリケーションウィジェット • 第7章 コピー&ペースト • 第8章 ドラッグ&ドロップ • 第9章 ローダー 私が書きました yanzmSaturday, March 24, 12
  • 61. Fragment Action Provider Action Bar Loader Android 気になること? Gamepad, Joypad Wi-Fi Direct USB Host ADKSaturday, March 24, 12