Your SlideShare is downloading. ×
0
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
函館IKA ICS開発情報
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

函館IKA ICS開発情報

3,070

Published on

Published in: Technology
0 Comments
7 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,070
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
11
Comments
0
Likes
7
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

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

×