Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
330
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
Intent as Code
shoppingjaws
4
670
The Good Stuff, Not the Slop: Engineering High-Quality Android Apps with Modern AI Tooling
danybony
1
230
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
180
初心者DevRelとして参加者だった私が、DevRel Talks!#2に登壇するまでにしてきたこと
sokohirai
0
360
AIを上手に使っていこうとしたら越境せざるを得なくなった話 〜実践1年で見えた境界を越えなければならない理由と進め方〜 / Crossing borders with AI
tomoyakitaura
4
1.1k
型解析で実現する Go の言語内 DSL / Conference に Go! タイムテーブルの歩き方 for Gophers
mazrean
0
140
XP祭りでしか伝わらないフリップネタ #xpjug
murabayashi
0
120
マイコン向けの軽量Ruby「PicoRuby」で各種デバイスを制御するネイティブアプリの実現手法
bash0c7
0
310
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
3
490
AgentCore CLI で進化した AWS での AI エージェントの作り方 : 必要な機能を必要な時に
icoxfog417
PRO
2
260
RSSとCodexを使ってX投稿自動化してみた
ochtum
0
110
Hello, Hiroshima Geospatial Data! — Exploring DoboX with Python
ra0kley
0
180
Featured
See All Featured
Imperfection Machines: The Place of Print at Facebook
scottboms
270
14k
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
520
How to make the Groovebox
asonas
2
2.4k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Tell your own story through comics
letsgokoyo
1
1.1k
Docker and Python
trallard
47
4.2k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
232
55k
Java REST API Framework Comparison - PWX 2021
mraible
34
9.7k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
249
1.3M
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
530
Being A Developer After 40
akosma
91
590k
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ϥΠϒϥϦͳͲͷ ඪ४෦͕ఏڙ͞Ε͍ͯΔ