Simple ExoPlayer app in Sketchware
1. To add ExoPlayer in Sketchware pro project, in Library manager --> Local Library, download following dependency:
com.google.android.exoplayer:exoplayer:2.19.1
Do not skip sub-dependencies.
2. Select all downloaded dependencies except kotlin-stdlib-common-v1.6.21 and kotlin-stdlib-v1.6.21
3. Switch On AppCompat and design and Material library.
4. In permission manager, add INTERNET permissions.
5. In main.xml add three TextViews with links to videos.
6. Add an Intent component intent.
7. Create a new page, player.xml.
8. In TextView onClick events, use Intent to move to PlayerActivity. The video URL is saved with key "url".
9. In player.xml, add a LinearLayout, and
- convert it to com.google.android.exoplayer2.ui.PlayerView
- Set height to match_parent
- Change ID to playerView
- Add custom attributes:
- app:use_controller value true
- app:show_buffering value when_playing
10. In PlayerActivity, add event import and add following imports:
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.ui.PlayerView;
11. Add a custom variable ExoPlayer player.
12. In onCreate, put following codes:
player = new ExoPlayer.Builder(this).build();
binding.playerView.setPlayer(player);
// Example video link (replace with your link)
String videoUrl = getIntent().getStringExtra("url");
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(videoUrl));
player.setMediaItem(mediaItem);
player.prepare();
player.play();
13. Add onPause event and put following codes in it.
player.pause();
14. Add onDestroy event and put following codes in it.
player.release();
15. Save and run the project.
Adding control buttons in the ExoPlayer app in Sketchware
1. In player.xml, add a LinearLayout linear1, convert it FrameLayout, set padding to 0.
2. Inside FrameLayout, place the playerView. Below the playerView, add a horizontal LinearLayout and set it's id to overlayControls. Set padding of overlayControls to 4. Then set height of playerView to match_parent.
3. Inside overlayControls, add four ImageViews ivQuality, ivSpeed, ivSubtitles, ivFullscreen.
4. In View manager, deselect toolbar and statusbar.
5. Add a Boolean variable isFullscreen. Add four custom variables: ExoPlayer player, DefaultTrackSelector trackSelector, Handler handler, Runnable hideRunnable.
6. Create a more block hideControls and put following codes in it.
binding.overlayControls.setVisibility(View.GONE);
handler.removeCallbacks(hideRunnable);
7. Create a more block showControlsTemporarily and put following codes in it.
binding.overlayControls.setVisibility(View.VISIBLE);
handler.removeCallbacks(hideRunnable);
handler.postDelayed(hideRunnable, 5000);
8. Put following codes in onCreate.
// Initialize track selector and player
trackSelector = new DefaultTrackSelector(this);
trackSelector.setParameters(
trackSelector.buildUponParameters().setMaxVideoSizeSd()
);
player = new ExoPlayer.Builder(this)
.setTrackSelector(trackSelector)
.build();
binding.playerView.setPlayer(player);
// Example video link (replace with your link)
String videoUrl = getIntent().getStringExtra("url");
MediaItem mediaItem = MediaItem.fromUri(Uri.parse(videoUrl));
player.setMediaItem(mediaItem);
player.prepare();
player.play();
handler = new Handler();
hideRunnable = new Runnable() {
@Override
public void run() {
_hideControls();
}
};
_showControlsTemporarily();
9. Add onStop event and put following codes.
handler.removeCallbacks(hideRunnable);
10. In onPause event put player.pause(); and in onDestroy event put player.release();
11. In import event put following codes.
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.trackselection.DefaultTrackSelector;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector;
import com.google.android.exoplayer2.trackselection.MappingTrackSelector.MappedTrackInfo;
import com.google.android.exoplayer2.ui.PlayerView;
import com.google.android.exoplayer2.ui.TrackSelectionDialogBuilder;
import com.google.android.exoplayer2.C;
import android.content.pm.ActivityInfo;
12. Create a more block showQualityDialog and put following codes in it.
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo != null) {
int rendererIndex = -1;
for (int i = 0; i < mappedTrackInfo.getRendererCount(); i++) {
if (mappedTrackInfo.getRendererType(i) == C.TRACK_TYPE_VIDEO) {
rendererIndex = i;
break;
}
}
if (rendererIndex != -1) {
TrackSelectionDialogBuilder builder = new TrackSelectionDialogBuilder(
this,
"Select Video Quality",
player, // Use Player instead of TrackSelector
C.TRACK_TYPE_VIDEO // Use track type instead of renderer index
);
builder.setShowDisableOption(false);
builder.setAllowAdaptiveSelections(false);
builder.setTrackNameProvider(null);
builder.build().show();
}
}
13. In ImageView ivQuality onClick event, use the more block showQualityDialog.
14. Create a more block showSpeedMenu and put following codes in it.
PopupMenu speedMenu = new PopupMenu(getApplicationContext(), binding.ivSpeed);
speedMenu.getMenu().add("0.5x");
speedMenu.getMenu().add("1x");
speedMenu.getMenu().add("1.5x");
speedMenu.getMenu().add("2x");
speedMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener(){
@Override
public boolean onMenuItemClick(MenuItem item){
float speed = Float.parseFloat(item.getTitle().toString().replace("x", ""));
player.setPlaybackSpeed(speed);
return true;
}
});
speedMenu.show();
15. In ImageView ivSpeed onClick event, use the more block showSpeedMenu.
16. Create a more block showSubtitleDialog and put following codes in it.
MappedTrackInfo mappedTrackInfo = trackSelector.getCurrentMappedTrackInfo();
if (mappedTrackInfo == null) return;
// Use the Player constructor instead of TrackSelector and renderer index
new TrackSelectionDialogBuilder(
this,
"Select Subtitles",
player, // Use Player instance instead of TrackSelector
C.TRACK_TYPE_TEXT // Use track type instead of renderer index
)
.setShowDisableOption(true) // allows turning subtitles off
.setAllowAdaptiveSelections(false)
.setTrackNameProvider(null)
.build()
.show();
17. In ImageView ivSubtitles onClick event, use the more block showSubtitleDialog.
18. Create a more block toggleFullScreen and put following codes in it.
if (isFullscreen) {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
} else {
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}
isFullscreen = !isFullscreen;
19. In ImageView ivFullscreen onClick event, use the more block toggleFullScreen.
20. In the event playerView onClick, put following codes to show or hide the overlayControls linear.
if (binding.overlayControls.getVisibility() == View.VISIBLE) {
_hideControls();
} else {
_showControlsTemporarily();
}
21. Save and run the project.






Comments
Post a Comment