Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android TV - Japan Android Group 2016 Aug.
Search
Takashi EGAWA
August 23, 2016
Programming
610
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Android TV - Japan Android Group 2016 Aug.
Takashi EGAWA
August 23, 2016
More Decks by Takashi EGAWA
See All by Takashi EGAWA
Fuchsia Shibuya.apk #28 2018.9.28
t_egg
1
320
GDG Tokyo Android Architecture Components - LiveData
t_egg
9
2.5k
DroidKaigi 2016 パフォーマンスを追求したAndroidアプリを作るには
t_egg
8
9k
Other Decks in Programming
See All in Programming
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
130
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
570
ローカルLLMを使ってB2Bサービスを作っていての学び
yaotti
0
210
不変条件と整合性境界—ビジネスが決める設計判断と実現パターン / Invariants and Consistency Boundaries
nrslib
14
5.8k
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.4k
技術記事、 専門家としてのプログラマ、 言語化
mizchi
13
6.5k
AIで効率化できた業務・日常
ochtum
0
140
スマートグラスで並列バイブコーディング
hyshu
0
260
依存関係から依存物へ―Dependencyという言葉の歴史をひも解く
j_lee
0
130
エージェンティックRAGにAWSで入門しよう!
har1101
9
1.7k
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
800
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
390
Featured
See All Featured
Building AI with AI
inesmontani
PRO
1
1.1k
Visual Storytelling: How to be a Superhuman Communicator
reverentgeek
2
560
Documentation Writing (for coders)
carmenintech
77
5.4k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
62
44k
The Cost Of JavaScript in 2023
addyosmani
55
10k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
1
750
Pawsitive SEO: Lessons from My Dog (and Many Mistakes) on Thriving as a Consultant in the Age of AI
davidcarrasco
0
170
Lightning talk: Run Django tests with GitHub Actions
sabderemane
0
200
The Mindset for Success: Future Career Progression
greggifford
PRO
0
370
Amusing Abliteration
ianozsvald
1
210
<Decoding/> the Language of Devs - We Love SEO 2024
nikkihalliwell
1
250
Transcript
ຊ"OESPJEͷձ݄ఆྫձ "OESPJE57ରԠͷ ΞϓϦέʔγϣϯ։ൃɾ৴ํ๏ ߐਸ UFHBXB!HNBJMDPN 4NBSUJVN ג (PPHMF%FWFMPQFS&YQFSU
"OESPJE57ͱ
ϦϏϯάϧʔϜͰ͏ϓϩμΫτ ϦϏϯάϧʔϜͰͷϢʔβʔମݧʹϑΥʔΧεͨ͠ (PPHMFͷϓϩμΫτ ˙(PPHMF$BTU ˙"OESPJE57 Chromecast Audio Chromecast Android
TV
ϦϏϯάϧʔϜͰͷϢʔβʔମݧʹϑΥʔΧεͨ͠ (PPHMFͷϓϩμΫτ ˙(PPHMF$BTU ˙"OESPJE57 ϦϏϯάϧʔϜͰ͏ϓϩμΫτ Chromecast Audio Chromecast Android
TV
σόΠεͷܗଶ ܕ Ұମܕ $ISPNFDBTU /7*%*"4)*&-% 9JBPNJ.J#PY 5PTIJCB4NBSU57 40/:#3"7*" 4)"31"2604
ܕɿ ઃఆૢ࡞ʹଟগͷ͕ࣝඞཁ͕͍ͩ׳Εͨطଘͷػث͕͑Δ Ұମܕɿ ઃఆૢ࡞༰қ͕ͩػثຊདྷͷߪೖϥΠϑαΠΫϧͱ߹͍͍
(PPHMF$BTUͱ"OESPJE57 (PPHMF$BTU ˙ΞϓϦ։ൃ (PPHMF$BTU4%, Wʹ ެ։ Λ༻͍ͯ։ൃ TFOEFSσόΠεͱͯ͠ԼهΛఏڙ w"OESPJE"1* wJ04"1*
w$ISPNF"1* ˙ΞϓϦ৴ (PPHMF$BTU4%,%FWFMPQFS ʹొʢॳճυϧʣ͠৴ IUUQTDBTUHPPHMFDPNQVCMJTI
(PPHMF$BTUͱ"OESPJE57 (PPHMF$BTU ˙ΞϓϦ։ൃ (PPHMF$BTU4%, Wʹ ެ։ Λ༻͍ͯ։ൃ TFOEFSσόΠεͱͯ͠ԼهΛఏڙ w"OESPJE"1* wJ04"1*
w$ISPNF"1* ˙ΞϓϦ৴ (PPHMF$BTU4%,%FWFMPQFS ʹొʢॳճυϧʣ͠৴ IUUQTDBTUHPPHMFDPNQVCMJTI "OESPJE57 ˙ΞϓϦ։ൃ ௨ৗͷ"OESPJEΞϓϦ։ൃ -FBOCBDL-JCSBSZͰͷ։ൃ $BTUΞϓϦඪ४ಈ࡞ ˙ΞϓϦ৴ ௨ৗͷΞϓϦͱಉ༷ʹ(PPHMF1MBZ Ͱͷ৴ ˞৹ࠪ͋Γ
"OESPJE57˺"OESPJE "OESPJE57 "OESPJE r"GFX(PPHMFBQQT r4PNFIBSEXBSFGFBUVSFT 1MBUGPSN57GFBUVSFT 0&.$VTUPNJ[BUJPO
w։ൃπʔϧ4%,طଘͷͷͱڞ௨ w"1*جຊతʹͯ͢ར༻Մ wͨͩ͠ɺ͍͔ͭ͘ͷ(PPHMFΞϓϦඇࡌ 8&#ϒϥβ $ISPNF (PPHMF.BQT ϝʔϧ (NBJM (PPHMF )BOHPVU w57ͷಛੑ্ɺࡌ͍ͯ͠ͳ͍ϋʔυΣΞػೳ͋Γ
6OJUZωΠςΟϒαϙʔτ w6OJUZ͔Β"OESPJE57ΛωΠςΟϒαϙʔτ wίʔυϥϘl"OESPJE57(BNFTGPS6OJUZz͋Γ IUUQHDPDPEFMBCT
6OJUZͰͷ73ʹೃછΈ͕ͳ͍ਓ
6OJUZͰͷ73ʹೃછΈ͕ͳ͍ਓ 6OJUZʹΑΔ73ΞϓϦέʔγϣϯ։ൃ ʕʕ࡞Γͳ͕ΒֶͿόʔνϟϧϦΞϦςΟೖ +POBUIBO-JOPXFTɹஶ ߴڮݑҰɺ҆౻ԝɺߐਸɺ͋ΜͲ͏͢͠ɹ༁ ग़൛ɿΦϥΠϦʔδϟύϯ ݄ൃച༧ఆ ԁ
ϖʔδ *4#/
"OESPJE57ΤϛϡϨʔλ w͔ͭͯͷ"OESPJE57ΤϛϡϨʔλಈ࡞ෆ҆ఆͩͬ ͕ͨɺݱࡏൺֱత҆ఆ͓ͯ͠Γɺߴʹಈ࡞͢Δ wσόΠεΛඞཁͱͤͣʹ։ൃͰ͖Δ
57ରԠͷجຊ
57ରԠͷجຊ wϥϯυεέʔϓݻఆ wૢ࡞෦ࠨӈʹஔ্͖Լઅɻ"DUJPO#BSෆཁ wϦϞίϯૢ࡞ʢ%1BE·ͨήʔϜίϯτϩʔϥʣ wϥϯνϟʔʹఏڙ͢Δ57όφʔ"DUJWJUZͷߟྀ wΦʔόʔεΩϟϯ wϋʔυΣΞػೳͷߟྀ w-FBOCBDLϥΠϒϥϦ࠾༻ͷݕ౼ wެ։લ৹ࠪ
57όφʔ ΞϓϦͷΤϯτϦϙΠϯτͷఆٛ
57όφʔ w57ͷϗʔϜεΫϦʔϯ͔ΒΞϓϦΛىಈ͢ΔͨΊͷ ΤϯτϦϙΠϯτͱͳΔ w57όφʔΛϢʔβʔ͕ΫϦοΫ͢ΔͱΞϓϦΛ ૢ࡞Ͱ͖ΔΑ͏ʹͳΔ
57όφʔ wYQY YIEQJϦιʔε wΞϓϦ໊͕ಡΊΔΑ͏ʹ͢Δ͜ͱʢ֤ࠃޠʣ
57όφʔͷՃ w"OESPJE.BOJGFTUYNM
57όφʔͷՃʢήʔϜͷ߹ʣ w"OESPJE.BOJGFTUYNM
ىಈ"DUJWJUZ ىಈ͖͢"DUJWJUZΛΒͤΔ
"DUJWJUZͷఆٛ w"OESPJE.BOJGFTUYNM
ΦʔόʔεΩϟϯ ը໘ͷ֎पʹର͢Δߟྀ
ΦʔόʔεΩϟϯ wඳը͕อূ͞Εͳ͍֎पͷྖҬ wΨΠυϥΠϯͱͯ͠ɺपғ
φϏήʔγϣϯɾ ϑΥʔΧεɾબ 57ʹ͓͚ΔϢʔβʔʹΑΔૢ࡞
φϏήʔγϣϯɾϑΥʔΧεɾબ w%1BEήʔϜίϯτϩʔϥʔͰͷΩʔೖྗૢ࡞ w্Լࠨӈͷ࢛ํʹҠಈ͕ݶఆ wॎԣೋ࣍ݩͷφϏήʔγϣϯܦ࿏͕ཧղ͠ ͍͢Α͏ʹ wϑΥʔΧε wৗʹͭͷΦϒδΣΫτʹϑΥʔΧε͢Δ ʢϢʔβʔ͕ࠓͲ͜Λૢ࡞͍ͯ͠Δ͔ཧղ Ͱ͖ΔΑ͏ʹʣ
Items Status KEYCODE_DPAD_UP KEYCODE_DPAD_DO WN
KEYCODE_DPAD_LEF T KEYCODE_DPAD_RIG HT KEYCODE_DPAD_CEN TER KEYCODE_BUTTON_A A" KEYCODE_BUTTON_B B" KEYCODE_BACK BACK" KEYCODE_HOME HOME" Android"TV" Items Focus nextFocusDown nextFocusUp nextFocusRight nextFocusLeft ํφϏήʔγϣϯ wجຊతʹͯ͢ΩʔΠϕϯτͱͯ͠ૹग़͞ΕΔ wPO,FZ%PXOͰಠࣗʹॲཧ͢Δ͜ͱՄೳ wϑΥʔΧεભҠ͕ෆࣗવͳ߹OFYU'PDVT999ཁૉͰมߋ͢Δ android:nextFocusRight=“@id/button1" android:nextFocusLeft="@id/button2"
<ImageView android:id="@+id/play_pause_button" android:focusable="true" android:nextFocusRight="@+id/ffw_button" android:nextFocusLeft="@+id/rewind_button" /> ϑΥʔΧεΛड͚औΒͳ͍7JFX wز͔ͭͷ7JFXσϑΥϧτͰϑΥʔΧεΛड͚औΒͳ͍ͷͰɺ໌ࣔత ʹઃఆ͕ඞཁ
wྫ*NBHF7JFXɺ5FYU7JFXɺ-JOFBS-BZPVUͳͲ
ϋʔυΣΞػೳ εϚϗλϒϨοτͱͷҧ͍ͷߟྀ
ϋʔυΣΞػೳ w57Ͱඪ४αϙʔτ͞Εͳ͍ػೳ͕͋Δ wແ͍͜ͱΛલఏʹ࡞Δ wڞ௨ΞϓϦͷ߹ɺػೳΛඞਢͱ͠ͳ͍ࢫΛએݴ͠ɺ࣮ߦ࣌ʹػೳͷ ༗ແΛνΣοΫ͢Δ
android.hardware.touchscreen android.hardware.faketouch android.hardware.telephony android.hardware.camera Bluetooth android.hardware.bluetooth Near Field Communications (NFC) android.hardware.nfc GPS android.hardware.location.gps android.hardware.microphone android.hardware.sensor <uses-feature android:name="android.hardware.touchscreen" android:required="false" />
҉తͳϋʔυΣΞཁٻ wύʔϛογϣϯཁٻʢVTFQFSNJTTJPOʣΛ͢Δͱɺ҉తʹϋʔυΣ ΞػೳΛཁٻͨ͜͠ͱʹͳΔέʔε͕͋Δ w໌ࣔతʹVTFGFBUVSFλάʹSFRVJSFEGBMTF͕ඞཁ
3&$03%@"6%*0 android.hardware.microphone $".&3" android.hardware.camera "$$&44@'*/&@-0$"5*0/ android.hardware.location android.hardware.location.gps
$16ΞʔΩςΫνϟ wੈͷதͷଟ͘ͷ"OESPJE57σόΠεɺΠϯςϧܥ$16Λࡌ͍ͯ͠Δ wͨͩ͠ɺ40/:#3"7*"ͷΑ͏ʹ"3.Λ࠾༻͍ͯ͠Δͷ͋ΔͷͰɺ $16ΞʔΩςΫνϟʔʹґଘ͢ΔΞϓϦߟྀ͕ඞཁ
-FBOCBDLϥΠϒϥϦ 57༻6*ϥΠϒϥϦ
-FBOCBDLϥΠϒϥϦ w57͚Ϣʔβʔମݧͷ࣮Λࢧԉ͢ΔαϙʔτϥΠϒϥϦ wैདྷͷWαϙʔτϥΠϒϥϦɺW3FDZDMF7JFXΛར༻͠ ֦ͨுϥΠϒϥϦ wඞਢͰͳ͍͕ར༻͢Δͱ57͚6*ͷָ࣮͕ʹͳΔ wΦʔόʔεΩϟϯྖҬͷߟྀෆཁ w-FBOCBDLςʔϚ w57༻ඪ४ςʔϚ <activity
android:name="com.example.android.TvActivity" android:label="@string/app_name" android:theme="@style/Theme.Leanback">
#SPXTF'SBHNFOU wͯ͢ͷϝσΟΞίϯςϯπΛҰՕॴʹ·ͱΊͯӾཡͰ͖ΔΑ͏ʹ͢Δ wΧςΰϦ͝ͱͷྨɺ֤ϝσΟΞͷάϦουදࣔͳͲ͕ඪ४ͰՄೳ 3&$03%@"6%*0
android.hardware.microphone $".&3" android.hardware.camera "$$&44@'*/&@-0$"5*0/ android.hardware.location android.hardware.location.gps
#SPXTF'SBHNFOU 3&$03%@"6%*0 android.hardware.microphone $".&3"
android.hardware.camera "$$&44@'*/&@-0$"5*0/ android.hardware.location android.hardware.location.gps wΧςΰϦબ࣌ɺΧςΰϦʹରԠ͢ΔϝσΟΞͷλΠτϧͳͲΛදࣔ
%FUBJMT'SBHNFOU w݅ͷϝσΟΞίϯςϯπͷৄࡉͳใϝσΟΞʹର͢Δૢ࡞Λఏڙ 3&$03%@"6%*0 android.hardware.microphone
$".&3" android.hardware.camera "$$&44@'*/&@-0$"5*0/ android.hardware.location android.hardware.location.gps
1MBZCBDL0WFSMBZ'SBHNFOU wϝσΟΞͷࢹௌɾૢ࡞ʢ࠶ੜɾఀࢭɾ࣍ɾલͳͲʣ wؔ࿈ίϯςϯπͷදࣔ
4FBSDI'SBHNFOU wϝσΟΞͷࢹௌɾૢ࡞ʢ࠶ੜɾఀࢭɾ࣍ɾલͳͲʣ wؔ࿈ίϯςϯπͷදࣔ
όʔδϣϯͷҧ͍ ৽ چ
3FDPNNFOEBUJPOTʢΦεεϝʣ wΞϓϦ͕Ϣʔβʔʹ͓͢͢Ί͍ͨ͠ϝσΟΞίϯςϯπΛఏڙ wϢʔβʔ͕બ͢ΔͱͦͷϝσΟΞʹμΠϨΫτʹඈͿ͜ͱ͕Ͱ͖Δ w-FBOCBDLϥΠϒϥϦͱผͷϥΠϒϥϦ wΦεεϝ͖͢ͷͷ҆ w࣍ͷίϯςϯπྫʣγϦʔζͷ࣍ͷΤϐιʔυ w৽͍͠ίϯςϯπྫʣ৽γϦʔζਓؾίϯςϯπ wؔ࿈ίϯςϯπྫʣϢʔβʔͷࢹௌཤྺʹجͮ͘
android { compileSdkVersion 24 buildToolsVersion '24' ... } dependencies
{ ... compile 'com.android.support:leanback-v17:24.0.0' compile 'com.android.support:recommendation:24.0.0' } ར༻͢Δʹ wCVJMEHSBEMF
"1,ͷ৴ 57ରԠΞϓϦͷެ։
wՁ֨ͱൢചҬ 1SJDJOH%*453*#65*0/ ͔Β"OESPJE57ͷ ΧςΰϦʹνΣοΫΛೖΕΔ͜ͱͰ57༻ϨϏϡʔ͕ߦΘΕΔ wϨϏϡʔ͕௨Εɺ57༻1MBZ4UPSFͰެ։͞ΕΔ wϨϏϡʔ͕௨Βͳ͘ͱɺ௨ৗͷ1MBZ4UPSFʹӨڹͳ͍ wυΩϡϝϯτɿ"OESPJE57ͷʢIUUQHPPHM"S1Y1Yʣ w-&"/#"$,@-"6/$)&3 w57༻όφʔը૾ Y
YIEQJ wαϙʔτ֎ͷϋʔυΣΞͷґଘΛഉআʢλονεΫϦʔϯͳͲʣ wύʔϛογϣϯઃఆʹΑΔ҉తͳϋʔυΣΞཁٻͷ֬ೝ wϥϯυεέʔϓରԠ wڑ͕Ε͍ͯͯݟ͑ΔΑ͏ʹ wΦʔόʔεΩϟϯͷରԠ w-FBOCBDL6*ͷରԠ "1,ͷ৴
࠷ޙʹ wϦϏϯάϧʔϜʹϑΥʔΧεͨ͠ϓϩμΫτ (PPHMF$BTU "OESPJE57 w"OESPJE57$BTUඪ४ࡌͷl"OESPJEzͰ͋Δ w57ରԠʹ6*ϋʔυΣΞػೳͷߟྀ͕ඞཁ w৴ʹࣄલ৹͕ࠪඞཁ w57ରԠΛࢧԉ͢ΔͨΊʹ-FBOCBDLϥΠϒϥϦͳͲͷ ඪ४෦͕ఏڙ͞Ε͍ͯΔ