PMO Pertemuan 6 Android Multimedia

ANDROID MULTIMEDIA

 

Multimedia di Android

Android memiliki fitur yang mendukung multimedia, di antaranya adalah gambar, audio dan video. Pengembang Android bisa memanfaatkan sepenuhnya kemampuan multimedia canggih dari smartphone masa kini, dan Android menyediakan fitur android.media, yang berisi banyak kelas berguna.

Untuk memasukkan gambar ke aplikasi kita bisa menggunakan fitur ImageView. Selain menggunakan gambar bawaan dari Android Studio, kita juga bisa memasukkan gambar yang lain ke aplikasi. Android mendukung beberapa ekstensi gambar seperti JPEG, GIF, PNG, BMP dan lain-lain.

Android dapat memecahkan/decode kode audio dan video dengan ekstensi seperti .3GP, .MP4, .M4A, .MP3, .OGG, .WAV, dan lain lain.

Kita bisa menggunakan fitur ImageView untuk gambar. ImageView bisa menampilkan sumber gambar, misalnya sumber Bitmap atau Drawable. ImageView juga biasa digunakan untuk menerapkan tints pada gambar dan menangani penskalaan gambar.

  • Audio

Android menyediakan banyak cara untuk mengontrol pemutaran file audio / video dan stream. Salah satu cara ini adalah melalui kelas yang disebut MediaPlayer.

Android menyediakan kelas MediaPlayer untuk mengakses layanan mediaplayer di dalamnya seperti memainkan audio, video dan lain-lain. Untuk menggunakan MediaPlayer, kita harus memanggil method statis create () dari kelas ini. Metode ini mengembalikan sebuah instance dari kelas MediaPlayer. Sintaksnya adalah –

mediaPlayer = MediaPlayer.create (this, R.raw.sample_song);

Parameter kedua adalah nama lagu yang ingin dimainkan. Kita harus membuat folder baru di bawah proyek  dengan nama raw dan letakkan file musik ke dalamnya. Kita bisa langsung mengkopikan file ke dalam folder dengan perintah klik kanan pada folder raw atau drawable atau yang lain lalu pilih Show in Folder.

Metode & deskripsi

 isPlaying() : Method ini hanya mengembalikan true / false yang menunjukkan lagu tersebut sedang diputar atau tidak

seekTo (posisi) : Method ini mengambil bilangan bulat, dan memindahkan lagu ke detik tertentu

getCurrentDuration () : Method ini mengembalikan posisi lagu saat ini dalam milidetik

getDuration () : Method ini mengembalikan total waktu durasi lagu dalam milidetik

reset () : Method ini me-reset media player

release() : Method ini melepaskan resource  apapun yang menyertainya dengan objek MediaPlayer

setVolume (float leftVolume, float rightVolume) : Method ini menetapkan volume turun untuk pemutar ini

setDataSource (FileDescriptor fd) : Method ini mengatur sumber data file audio / video

selectTrack (int index) : Method ini mengambil bilangan bulat, dan memilih file audio dari daftar pada indeks tertentu

getTrackInfo () = Method ini mengembalikan array informasi audio.

Contoh source code pada layout:

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
tools:context=”com.rajaular.musicplayer.MainActivity”
android:orientation=”vertical”
android:gravity=”center_horizontal”>

<ImageView
android:layout_width=”100dp”
android:layout_height=”100dp”
android:src=”@drawable/image”
android:layout_marginTop=”60dp”/>

<SeekBar
android:id=”@+id/positionBar”
android:layout_width=”300dp”
android:layout_height=”wrap_content”
android:layout_marginTop=”30dp”/>

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”>
<TextView
android:id=”@+id/elapsedTimeLabel”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”0:11″
android:layout_marginLeft=”40dp”/>
<TextView
android:id=”@+id/remainingTimeLabel”
android:layout_width=”wrap_content”
android:layout_height=”wrap_content”
android:text=”-1:49″
android:layout_marginLeft=”240dp”/>
</LinearLayout>

<Button
android:id=”@+id/playBtn”
android:layout_width=”30dp”
android:layout_height=”30dp”
android:background=”@drawable/play”
android:layout_marginTop=”40dp”
android:onClick=”playBtnClick”/>

<LinearLayout
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:orientation=”horizontal”
android:layout_marginTop=”40dp”
android:gravity=”center”>
<ImageView
android:layout_width=”18dp”
android:layout_height=”18dp”
android:src=”@drawable/sound”/>
<SeekBar
android:id=”@+id/volumeBar”
android:layout_width=”300dp”
android:layout_height=”wrap_content”
android:progress=”50″
android:max=”100″/>
<ImageView
android:layout_width=”26dp”
android:layout_height=”26dp”
android:src=”@drawable/sound2″/>
</LinearLayout>

</LinearLayout>

Contoh source code pada activity

package com.rajaular.musicplayer;

import android.media.MediaPlayer;
import android.os.Handler;
import android.os.Message;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;

public class MainActivity extends AppCompatActivity {

Button playBtn;
SeekBar positionBar;
SeekBar volumeBar;
TextView elapsedTimeLabel;
TextView remainingTimeLabel;
MediaPlayer mp;
int totalTime;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

playBtn = (Button) findViewById(R.id.playBtn);
elapsedTimeLabel = (TextView) findViewById(R.id.elapsedTimeLabel);
remainingTimeLabel = (TextView) findViewById(R.id.remainingTimeLabel);

mp = MediaPlayer.create(this, R.raw.music);        mp.setLooping(true);        mp.seekTo(0);
mp.setVolume(0.5f, 0.5f);
totalTime = mp.getDuration();

positionBar = (SeekBar) findViewById(R.id.positionBar);
positionBar.setMax(totalTime);
positionBar.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (fromUser) {
mp.seekTo(progress);
positionBar.setProgress(progress);
}
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
}
);

// Volume Bar
volumeBar = (SeekBar) findViewById(R.id.volumeBar);
volumeBar.setOnSeekBarChangeListener(
new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
float volumeNum = progress / 100f;
mp.setVolume(volumeNum, volumeNum);
}

@Override
public void onStartTrackingTouch(SeekBar seekBar) {

}

@Override
public void onStopTrackingTouch(SeekBar seekBar) {

}
}
);

// thread untuk mengupdate positionbar dan label
new Thread(new Runnable() {
@Override
public void run() {
while (mp != null) {
try {
Message msg = new Message();
msg.what = mp.getCurrentPosition();
handler.sendMessage(msg);
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}
}).start();

}

private Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
int currentPosition = msg.what;
// Update positionBar
positionBar.setProgress(currentPosition);

// Update Label
String elapsedTime = createTimeLabel(currentPosition);
elapsedTimeLabel.setText(elapsedTime);

String remainingTime = createTimeLabel(totalTime-currentPosition);
remainingTimeLabel.setText(“- ” + remainingTime);
}
};

public String createTimeLabel(int time) {
String timeLabel = “”;
int min = time / 1000 / 60;
int sec = time / 1000 % 60;

timeLabel = min + “:”;
if (sec < 10) timeLabel += “0”;
timeLabel += sec;

return timeLabel;
}

public void playBtnClick(View view) {

if (!mp.isPlaying()) {
// Stop/pause audio
mp.start();
playBtn.setBackgroundResource(R.drawable.stop);

} else {
// Memainkan audio
mp.pause();
playBtn.setBackgroundResource(R.drawable.play);
}

}
}

  

  • Video

Di Android, VideoView digunakan untuk menampilkan file video. VideoView dapat memuat gambar dari berbagai sumber (seperti penyedia konten atau sumber daya) yang mengatur komputasi pengukurannya dari video sehingga dapat digunakan untuk mengatur tata letak, memberikan opsi tampilan seperti penskalaan dan pewarnaan.

Sama seperti sebelumnya, resource untuk video bisa diletakkan di folder raw

 

Method yang digunakan dalam VideoView:

  1. setVideoUri (Uri uri): Method ini digunakan untuk mengatur path absolut file video yang akan dimainkan. Metode ini mengambil objek Uri sebagai argumen.
  2. setMediaController (MediaController controller): Method VideoView ini digunakan untuk mengatur kontroler untuk kontrol pemutaran video.
  3. pause(): Method tampilan video ini digunakan untuk menjeda pemutaran saat ini.
  4. canPause (): Method ini akan memberi tahu apakah VideoView dapat menjeda video. Metode inmenggunakan nilai Boolean untuk menentukan hal tersebut. Jika sebuah video bisa dijeda maka nilai return benar dan jika tidak maka return false.
  5. canSeekForward (): Method ini akan memberi tahu apakah video dapat terus maju. Metode ini mengembalikan nilai Boolean yaitu true atau false. Jika sebuah video dapat mencari maju maka ia mengembalikan yang sebenarnya jika tidak maka hasilnya salah.
  6. canSeekBackward (): Method ini akan memberi tahu apakah video dapat mencari mundur. Metode ini mengembalikan nilai Boolean yaitu true atau false. Jika sebuah video bisa mencari ke belakang maka kembali benar jika tidak maka return false.
  7. getDuration (): Method ini digunakan untuk mendapatkan durasi total VideoView. Metode ini mengembalikan nilai integer.
  8. getCurrentPosition (): Method ini digunakan untuk mendapatkan posisi playback saat ini. Metode ini mengembalikan nilai integer.
  9. isPlaying (): Method ini menceritakan apakah sebuah video sedang diputar atau tidak. Metode ini mengembalikan nilai Boolean. Ini mengembalikan true jika video diputar atau false jika tidak.
  10. stopPlayback (): Method VideoView ini digunakan untuk menghentikan pemutaran video.

 

Contoh source code pada layout

<?xml version=”1.0″ encoding=”utf-8″?>
<LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”
xmlns:app=”http://schemas.android.com/apk/res-auto”
xmlns:tools=”http://schemas.android.com/tools”
android:layout_width=”match_parent”
android:layout_height=”match_parent”
android:orientation=”vertical”
tools:context=”com.rajaular.videoplayer.MainActivity”>

<VideoView

android:id=”@+id/video_view”
android:layout_width=”match_parent”
android:layout_height=”wrap_content”
android:layout_gravity=”center”/>

</LinearLayout>

Contoh source code pada activity

package com.rajaular.videoplayer;

import android.app.ProgressDialog;
import android.widget.MediaController;
import android.net.Uri;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.VideoView;
import android.media.MediaPlayer;

public class MainActivity extends AppCompatActivity {

private VideoView myVideoView;
private int position = 0;
private ProgressDialog progressDialog;
private MediaController mediaControls;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

if (mediaControls == null) {
mediaControls = new MediaController(this);
}

myVideoView = (VideoView) findViewById(R.id.video_view);
progressDialog = new ProgressDialog(this);
progressDialog.setTitle(“VideoPlayer Contoh”);
progressDialog.setMessage(“Loading…”);
progressDialog.setCancelable(false);

progressDialog.show();

try {
myVideoView.setMediaController(mediaControls);
myVideoView.setVideoURI(Uri.parse(“android.resource://” +
this.getPackageName() + “/” + R.raw.android));
} catch (Exception e) {
Log.e(“Error”, e.getMessage());
e.printStackTrace();
}

myVideoView.requestFocus();
        myVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
public void onPrepared(MediaPlayer mediaPlayer) {
progressDialog.dismiss();
myVideoView.seekTo(position);
if (position == 0) {
myVideoView.start();
} else {
myVideoView.pause();
}

}

});

}

}

 

Presentasi

PMO presentasi PERTEMUAN 7