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
620
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.6k
DroidKaigi 2016 パフォーマンスを追求したAndroidアプリを作るには
t_egg
8
9.1k
Other Decks in Programming
See All in Programming
レビュー履歴をAIに食わせて、 Compose移行を加速するs
shihochan
0
240
30年振りにコンパイラの定数整数除算を改善した
herumi
9
4.3k
バグを直したら useEffect が消えた
colorful12
3
770
仕様書を書く前にハーネスを作る - Agent Native開発は「探索を速く、判定を固く」
gotalab555
5
1.8k
まずはプロンプトガイドを読もう、話はそれからだ
kiakiraki
1
230
まだ間に合う!今年の夏こそSchemeのマクロ展開器を完全理解!
omasanori
0
570
関東Kaggler会_NVIDIA_Nemotron_コンペ_振り返り
rick_ds
0
740
Flow は今どうなっているか
mizdra
PRO
0
770
PyConJP2026_wat_Python × Signal Processing: How to Draw Pictures with Sound Using Spectrogram Art
wat
0
580
楽しそうなつよつよエンジニアと目が死んでる僕/A brilliant engineer having a blast, and dead-eyed me.
3l4l5
2
260
KotlinConf Extended South Korea 2026 Keynote
l2hyunwoo
0
130
進化を続けるGo toolsの現在地 / The Current State of Ever-Evolving Go Tools
hond0413
0
270
Featured
See All Featured
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
3
220
Digital Ethics as a Driver of Design Innovation
axbom
PRO
1
390
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
210
How to build an LLM SEO readiness audit: a practical framework
nmsamuel
1
880
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
9
1.5k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
950
What’s in a name? Adding method to the madness
productmarketing
PRO
24
4.1k
Between Models and Reality
mayunak
4
410
The Director’s Chair: Orchestrating AI for Truly Effective Learning
tmiket
1
290
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Building Applications with DynamoDB
mza
96
7.2k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
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ϥΠϒϥϦͳͲͷ ඪ४෦͕ఏڙ͞Ε͍ͯΔ