Android Development on Fire TV
-
Upload
amazon-web-services -
Category
Business
-
view
422 -
download
5
Transcript of Android Development on Fire TV
![Page 1: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/1.jpg)
MAR IO V IV IAN IT E C H N O L O G Y E V A N G E L I S T , A M A Z O N A P P S T O R E U K
@mariuxtheone http ://www. l inked in .com/ in/ mariov iv iani
ANDRO ID
DEVELOPMENT
ON AMAZ ON F IRE TV
![Page 2: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/2.jpg)
I T ’ S A - M E !
M a r i o V i v i a n i
Technology Evangelist, Amazon Appstore UK
@mariuxtheone
Android Developer from 201095+ apps published12,000,000+ downloadsGoogle Developer Expert 2013-15Startup Founder, Co-WorkerSpeaker at: Droidcon, Android Dev Days, Google I/O 2015
![Page 3: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/3.jpg)
Android is Not Just for
Mobile Devices
![Page 4: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/4.jpg)
Android
Android TV Apps based on
Fire OS
Fire TV Apps based on
![Page 5: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/5.jpg)
OS 5Based on
Android
Lollipop
Android
Studio
![Page 6: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/6.jpg)
TV 4K & TV STICK
![Page 7: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/7.jpg)
bit.ly/firetvspecs
TV TV Stick
4K compatible FullHDQuad-core CPU Dual-core CPU
2 GB RAM 1 GB RAM
(2160p)(1080p)
WiFi – Bluetooth 4.1 WiFi – Bluetooth 3.0
8 GB Internal Storage(actual formatted capacity will be less)
8 GB Internal Storage(actual formatted capacity will be less)
USB-A and MicroSD slot MicroUSB (power only)
![Page 8: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/8.jpg)
TV APPS
![Page 9: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/9.jpg)
Development on Fire TV
ADB Setup
![Page 10: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/10.jpg)
![Page 11: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/11.jpg)
![Page 12: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/12.jpg)
![Page 13: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/13.jpg)
Development on Fire TVConnect ADB via WiFi
adb connect <ipaddress>
- + xTerminal
![Page 14: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/14.jpg)
Development on Fire TV
Project Setup:Media Streaming App
![Page 15: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/15.jpg)
TV APPS DEVELOPMENT
Fire TV SDK add-on
v17 Leanback Library
Fire TV SDK add-on
![Page 16: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/16.jpg)
Android Studio Project Setup
![Page 17: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/17.jpg)
Android Studio Project Setup
![Page 18: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/18.jpg)
dependencies {compile fileTree(dir: 'libs', include: ['*.jar'])compile 'com.android.support:recyclerview-v7:23.1.1'compile 'com.android.support:leanback-v17:23.1.1'compile 'com.android.support:appcompat-v7:23.1.1'compile 'com.github.bumptech.glide:glide:3.4.+'
}
Gradle Dependencies
![Page 19: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/19.jpg)
Browse
For
Content
Read
Description
&
Details
Play
TV Interaction Model
![Page 20: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/20.jpg)
Browse
Fragment
Details
Fragment
Playback
Overlay
Fragment
TV App Model
![Page 21: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/21.jpg)
Development on Fire TV
BrowseFragment
![Page 22: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/22.jpg)
![Page 23: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/23.jpg)
BrowseFragment
![Page 24: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/24.jpg)
HeadersFragment RowsFragment
BrowseFragment
![Page 25: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/25.jpg)
![Page 26: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/26.jpg)
ListRowAdapter
HeaderItem
Movie Movie Movie
![Page 27: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/27.jpg)
public class MainFragment extends BrowseFragment {
private void loadRows() {List<Movie> list = MovieList.setupMovies();
CardPresenter cardPresenter = new CardPresenter();
//Create the adapter for the row and add all the moviesArrayObjectAdapter listRowAdapter
= new ArrayObjectAdapter(cardPresenter);for (Movie movie:list) {
listRowAdapter.add(movie);}
//Create the header of this row HeaderItem header = new HeaderItem(0, "Category Name");
...
![Page 28: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/28.jpg)
ListRowAdapter
RowsAdapter
![Page 29: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/29.jpg)
public class MainFragment extends BrowseFragment {
...
//add the ListRowAdapter to the RowsAdapterArrayObjectAdapter rowsAdapter
= new ArrayObjectAdapter(new ListRowPresenter());
rowsAdapter.add(new ListRow(header, listRowAdapter));
setAdapter(mRowsAdapter);
}}
![Page 30: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/30.jpg)
TitleDescription
![Page 31: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/31.jpg)
TitleDescription
ImageCardView
![Page 32: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/32.jpg)
public ViewHolder onCreateViewHolder(ViewGroup parent) {...
ImageCardView cardView = new ImageCardView(parent.getContext);cardView.setFocusable(true);cardView.setFocusableInTouchMode(true);return new ViewHolder(cardView);
...}
public class CardPresenter extends Presenter {
CardPresenter
![Page 33: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/33.jpg)
CardPresenter
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object item) {Movie movie = (Movie) item;ImageCardView cardView = (ImageCardView) viewHolder.view;
if (movie.getCardImageUrl() != null) {cardView.setTitleText(movie.getTitle());cardView.setContentText(movie.getDescription());Glide.with(viewHolder.view.getContext())
.load(movie.getCardImageUrl())
.centerCrop()
.into(cardView.getMainImageView());}
}
![Page 34: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/34.jpg)
Development on Fire TV
DetailsFragment
![Page 35: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/35.jpg)
TitleSubtitleDescription
ACTION ACTION
![Page 36: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/36.jpg)
DetailsFragment
TitleSubtitleDescription
ACTION ACTION
![Page 37: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/37.jpg)
private void setupDetailsOverviewRow() {
final DetailsOverviewRow row = new DetailsOverviewRow(mSelectedMovie);
...row.setImageDrawable(R.drawable.default_background));row.addAction(new Action(ACTION_WATCH_TRAILER,
“Watch Trailer”, “FREE”)));
mAdapter.add(row);}
DetailsOverviewRow
![Page 38: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/38.jpg)
public class DetailsDescriptionPresenterextends AbstractDetailsDescriptionPresenter {
@Overrideprotected void onBindDescription(ViewHolder viewHolder, Object item) {
Movie movie = (Movie) item;
if (movie != null) {viewHolder.getTitle().setText(movie.getTitle());viewHolder.getSubtitle().setText(movie.getStudio());viewHolder.getBody().setText(movie.getDescription());
}}
}
DescriptionPresenter
![Page 39: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/39.jpg)
public class DetailsDescriptionPresenterextends AbstractDetailsDescriptionPresenter {
@Overrideprotected void onBindDescription(ViewHolder viewHolder, Object item) {
Movie movie = (Movie) item;
if (movie != null) {viewHolder.getTitle().setText(movie.getTitle());viewHolder.getSubtitle().setText(movie.getStudio());viewHolder.getBody().setText(movie.getDescription());
}}
}
DescriptionPresenter
![Page 40: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/40.jpg)
Development on Fire TV
Video Overlay
![Page 41: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/41.jpg)
![Page 42: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/42.jpg)
VideoView
PlaybackOverlayFragment
![Page 43: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/43.jpg)
playback_controls.xml
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent">
<VideoViewandroid:id="@+id/videoView"android:layout_width="match_parent"android:layout_height="match_parent"android:layout_gravity="center" />
<fragmentandroid:id="@+id/playback_controls_fragment"android:name="PlaybackOverlayFragment"android:layout_width="match_parent"android:layout_height="match_parent" />
</FrameLayout>
![Page 44: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/44.jpg)
PlaybackOverlayActivity - Components
public class PlaybackOverlayActivity extends Activity implements
PlaybackOverlayFragment.OnPlayPauseClickedListener {
private VideoView mVideoView;
private LeanbackPlaybackState mPlaybackState;
private MediaSession mSession;
![Page 45: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/45.jpg)
![Page 46: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/46.jpg)
PlaybackOverlayActivity - MediaSession
@Overridepublic void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);setContentView(R.layout.playback_controls);...
mSession = new MediaSession(this, "LeanbackSampleApp");mSession.setCallback(new MediaSessionCallback());mSession.setFlags(MediaSession.FLAG_HANDLES_MEDIA_BUTTONS
| MediaSession.FLAG_HANDLES_TRANSPORT_CONTROLS);
mSession.setActive(true);
}
![Page 47: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/47.jpg)
PlaybackOverlayActivity – Remote
@Overridepublic boolean onKeyUp(int keyCode, KeyEvent event) {
PlaybackOverlayFragment playbackOverlayFragment = findFragmentById(R.id.playback_controls_fragment);
switch (keyCode) {...case KeyEvent.KEYCODE_MEDIA_PLAY_PAUSE:
if (mPlaybackState == LeanbackPlaybackState.PLAYING) {playbackOverlayFragment.togglePlayback(false);
} else {playbackOverlayFragment.togglePlayback(true);
}return true;
...}
}
![Page 48: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/48.jpg)
PlaybackOverlayActivity – Play/Pause
public void onFragmentPlayPause(Movie movie, int position, Boolean playPause) {
mVideoView.setVideoPath(movie.getVideoUrl());
...
if (mPlaybackState != LeanbackPlaybackState.PLAYING) {mPlaybackState = LeanbackPlaybackState.PLAYING;if (position > 0) {
mVideoView.seekTo(position);mVideoView.start();
}...
updatePlaybackState(position);updateMetadata(movie);
}
![Page 49: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/49.jpg)
The Final
Result
![Page 50: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/50.jpg)
![Page 51: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/51.jpg)
CREATE
NEW EXPERIENCES
ON FIRE TV
![Page 52: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/52.jpg)
Support for Game Controller
![Page 53: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/53.jpg)
Amazon
Fling bit.ly/amazonfling
![Page 54: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/54.jpg)
DIALDIscovery And Launch
![Page 55: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/55.jpg)
Fire TV Catalogue Integration
![Page 56: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/56.jpg)
![Page 57: Android Development on Fire TV](https://reader030.fdocuments.net/reader030/viewer/2022013113/58809bb41a28abd8158b5a07/html5/thumbnails/57.jpg)
developer.amazon.com/appstore