Вы находитесь на странице: 1из 10

Jurnal Teknologi Informasi DINAMIK Volume 20, No.

1, Januari 2015 : 1-10 ISSN : 0854-9524

Implementasi Java Interface pada Pembuatan Aplikasi Multimedia


Berbasis Android

Agung Prihandono dan Eddy Nurraharjo


Program Studi Teknik Informatika, Universitas Stikubank Semarang
email: agunganak@gmail.com, eddynurraharjo@gmail.com

Abstrak

Penelitian ini menunjukkan salah satu teknik pemrograman dalam pemanfaatan kelas interface pada
bahasa Java untuk pembuatan aplikasi yang dijalankan pada perangkat sistem berbasis android. Dalam
pembuatannya, aplikasi dipecah menjadi beberapa modul. Hal ini dilakukan dengan tujuan untuk
memudahkan dalam pengembangan kode program itu sendiri. Kelas interface ini bertugas sebagai
perantara antar kelas juga dengan sistem android.

Kata kunci: Java Interface, Multimedia, Android

PENDAHULUAN dapat menyesuaikan dengan perkembangan


teknologi tanpa harus merombak secara total
Teknologi mobile berkembang sangat
dari aplikasi yang pernah dibuat ketika aplikasi
pesat, masing-masing vendor berlomba-lomba
tersebut akan dikembangkan ke versi berikutnya,
mengusung teknologi baru, baik teknologi
atau ketika ingin menambahkan fitur-fitur baru.
perangkat keras maupun perangkat lunak.
Salah satunya adalah dengan memanfaatkan
Perkembangan tersebut bertujuan salah satunya
interface dari bahasa pemrograman java.
untuk memudahkan dan memanjakan para calon
Penggunaan interface sangat membantu dalam
penggunanya. Salah satu teknologi yang
mendesain dan membangun kerangka kerja /
perkembangannya sangat pesat adalah perangkat
framework dari suatu aplikasi di android.
mobile berbasis android.
Selain perkembangan teknologi pada
Android merupakan sebuah sistem operasi
perangkat mobile, hal yang selalu berubah
yang sebelumnya dikembangkan khusus untuk
lainnya adalah konten. Melalui penelitian ini,
telepon genggam. Namun memiliki kemampuan
bermaksud untuk menganalisis bagaimana cara
yang setara dengan sistem operasi sebuah
android menangani konten-konten multimedia
komputer pribadi yang berbasis pada sistem
yang semakin berubah baik dari segi ukuran
operasi Linux.
maupun kualitas konten. Seperti konten gambar
Android didasarkan pada sistem open yang memiliki resolusi beragam, atau konten
source. Sehingga para pengembang punya audio bahkan animasi.
kesempatan yang sama untuk berkreasi
Dengan memanfaatkan interface yang
mengembangkan dan memanfaatkan sumber
dimiliki bahasa pemrograman java, diharapkan
daya teknologi yang tersedia pada sebuah
agar penanganan masing-masing konten dapat
perangkat.
dilakukan secara modular. Sehingga
Java merupakan salah satu bahasa memudahkan ketika terjadi perubahan
pemrograman paling popular. Maka dengan spesifikasi konten, tidak harus mengubah
kemampuan yang dimilikinya, pengembang seluruh sistem.
dapat dengan mudah membangun suatu
Permasalahan yang diteliti adalah sebagai
kerangka kerja aplikasi yang dinamis. Yang
berikut:

Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android 1


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

a. Bagaimana sistem android menangani kelebihan penggunaan interface pada sistem


konten multimedia yang berupa teks, berbasis android yaitu mengizinkan kita untuk
gambar, audio, hingga animasi grafis. terkonsentrasi pada semantik dari aplikasi yang
dibangun tanpa harus menunjukkan detail
b. Bagaimana pemanfaatan java interface
implementasi program dan mengizinkan kita
dalam pengembangan aplikasi multimedia
untuk dapat mengubah cara implementasi secara
pada perangkat android
mudah dan terpisah (Zechner dan Green, 2012).
TUJUAN DAN MANFAAT
Perantara lainnya adalah kelas abstrak.
Penelitian ini bertujuan untuk mengetahui Kelas abstrak memiliki kesamaan dengan
penanganan sistem android terhadap konten- interface, yaitu untuk merancang suatu aplikasi
konten grafis dalam pembuatan suatu aplikasi berbasis objek tetapi bukan untuk membuat
multimedia dengan mengoptimalkan fungsi implementasi dari aplikasi yang akan digunakan.
interface yang dimiliki oleh bahasa Keduanya memiliki karakteristik yang sama
pemrograman java. Interface digunakan sebagai seperti kelas pada umumnya, yaitu berisi nama
perantara komunikasi antar kelas yang berjalan kelas, atribut dan method. Dikarenakan kelas
pada platform android. Dibuat secara modular abstrak dan interface tidak
sehingga akan memudahkan dalam mengimplementasikan detail program, maka
pengembangan dan pembaruan kode program. kelas abstrak dan interface hanya menyertakan
Manfaat yang ingin dicapai pada nama-nama method tanpa badan program.
penelitian ini adalah untuk memberikan Namun di antara kelas abstrak dan
wawasan tentang bagaimana menerapkan interface punya beberapa perbedaan seperti
interface pada sistem berbasis android. Sekaligus ditunjukkan pada Tabel 1.
memberikan gambaran pembuatan kerangka-
Tabel 1. Perbandingan interface dan kelas
kerangka aplikasi multimedia.
abstrak
1. Pembahasan
No Interface Kelas abstrak
Pemrograman berorientasi objek
memungkinkan kita untuk memodelkan suatu 1 Dapat Dapat
kasus di dunia nyata untuk diterapkan ke dalam mendeklarasikan mendeklarasikan daftar
sistem yang terkomputerisasi. Dengan daftar method method
mengetahui konsep dasar sebuah objek di dunia 2 Tidak memiliki Kode program pada
nyata, maka kita dapat merepresentasikan objek kode pada masing- masing-masing method
tersebut berdasarkan dua buah karakteristik yaitu masing method dapat didefinisikan
keadaan sebuah objek dan perilakunya. Kelas
merupakan sebuah purwarupa dari objek yang 3 Hanya Dapat
dibuat. Kelas berisikan definisi-definisi yang mendeklarasikan mendeklarasikan
terdiri dari keadaan suatu objek ke dalam bentuk konstanta berbagai jenis tipe
atribut dan perilaku objek ke dalam bentuk variabel
metode/method. 4 Tidak memiliki Dapat memiliki
Suatu kelas dapat diakses secara langsung konstruktor konstruktor
maupun melalui perantara sebuah interface. 5 Mengizinkan Hanya mengizinkan
Interface dibuat untuk menjadi antarmuka bagi pewarisan lebih dari satu buah pewarisan
sebuah kelas dengan dunia luar. Interface satu
berisikan definisi-definisi yang ringkas atas
perilaku suatu objek yaitu kumpulan method 6 Tidak memiliki Selalu diwariskan dari
yang saling berkaitan tetapi tidak memiliki hirarki teratas kelas object
badan program. Dengan demikian dunia luar 7 Mengizinkan Hanya memiliki
tidak perlu tahu detail implementasi dari objek interface induk sebuah kelas induk
yang diakses. Hal ini menjadi salah satu

2 Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

lebih dari satu untuk merekam ketika jari yang menyentuh layar
lebih dari satu jari.
2. Implementasi Kelas Interface Selanjutnya untuk papan ketik/keyboard
Interface yang menangani konten akan membangkitkan dua buah event yaitu:
multimedia untuk aplikasi pada perangkat
a. Key-down: event ketika sebuah tombol
android dibuat sebagai antarmuka antar proses
ditekan.
yang terdapat di dalam aplikasi. Dengan
menggunakan android developer tool sebagai b. Key-up: even ketika sebuah tombol dilepas.
alat bantu dalam membuat projek dan Event pada papan ketik ini menyimpan
mengkompilasi menjadi sebuah aplikasi. informasi tentang key-code dari tombol yang
Pembuatan aplikasi dipecah ke dalam ditekan beserta karakter unicode yang sesuai
beberapa bagian yang selanjutnya diintegrasikan dengan tombol tersebut.
menjadi sebuah kerangka kerja/framework untuk Event yang terakhir yaitu pembacaan
memudahkan dalam membangun komunikasi sensor accelerometer. Sensor ini memberikan
antar proses di dalam sistem dengan platform nilai keluaran yang berkaitan dengan posisi
android. perangkat terhadap gravitasi bumi. Yaitu nilai
Setiap modul dapat memiliki setidaknya koodrinat x, y, dan z seperti yang ditunjukkan
sebuah interface atau lebih. Dan masing-masing pada Gambar 1.
interface memiliki setidaknya satu buah kelas
yang mengimplementasikannya.
2.1 Modul Masukan
Modul masukan ini menangani bagaimana
pengguna dapat berinteraksi dengan aplikasi
melalui beberapa alat masukan antara lain fungsi
sentuh, penekanan pada tombol tertentu, atau
masukan berupa pembacaan sensor Gambar 1 Orientasi arah sensor sebuah
asccelerometer. perangkat android
Sebuah perangkat berbasis android, Nilai untuk masing masing sumbu
memiliki tiga buah metode masukan yang dinotasikan dengan meter perdetik kuadrat
dikenal yaitu layar sentuh, papan ketik dan (m/s2). Di mana merepresentasikan bahwa
sensor (accelerometer). Masing-masing sebuah benda akan melakukan percepatan pada
masukan tersebut dapat membangkitkan 9,8m/s2 ketika benda tersebut jatuh bebas.
berbagai event tertentu. Untuk layar sentuh
membangkitkan event sebagai berikut: Dari tiga macam masukan di atas,
interface yang dibuat untuk keperluan tersebut
a. Touch-down: event yang terjadi ketika jari ditunjukkan pada kode program berikut ini:
menyentuh layar
public interface Input {
b. Touch-drag: event yang terjadi ketika jari
digerakkan secara mengusap di atas layar. public interface Masukan {
c. Touch-up: event yang terjadi ketika jari public static class EventTombol {
diangkat/melepaskan dari layar. public static final int
KEY_DOWN = 0;
Setiap event sentuh akan merekam
public static final int KEY_UP
informasi tentang posisi sentuh jari terhadap
= 1;
komponen antarmuka pengguna yang sedang
public int type;
aktif dan sebuah pointer indeks yang digunakan
public int keyCode;
public char keyChar;

Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android 3


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

} Bagian ini mengatur bagaimana aplikasi


public static class EventSentuh { dalam memuat dan memainkan berkas audio.
public static final int Tanpa melakukan berbagai pengolahan pada
TOUCH_DOWN = 0; berkas audio. Dalam memainkan berkas audio,
public static final int mekanismenya dibagi menjadi dua macam yaitu
TOUCH_UP = 1; memainkan audio yang menjadi suara latar dari
public static final int aplikasi dan memainkan suara efek. Perancangan
TOUCH_DRAGGED = 2; kode interface ditunjukkan pada kode program
public int type; berikut ini.
public int x, y;
public interface Audio {
public int pointer;}
public SuaraLatar newMusic(String
public boolean isKeyPressed(int
filename);
keyCode);
public SuaraEfek newSound(String
public boolean isTouchDown(int
filename);
pointer);
}
public int getTouchX(int pointer);
public interface SuaraEfek {
public int getTouchY(int pointer);
public void play(float volume);
public float getAccelX();
public void dispose();
public float getAccelY();
}
public float getAccelZ();
public interface SuaraLatar {
public List<KeyEvent>
public void play();
getKeyEvents();
public void stop();
public List<TouchEvent>
public void pause();
getTouchEvents();
public void setLooping(boolean
}
looping);
Gambar 2. Kode Program Masukan public void setVolume(float volume);
public boolean isPlaying();
2.2 Berkas I/O public boolean isStopped();
Bagian ini menangani bagaimana aplikasi public boolean isLooping();
mengakses berkas eksternal yang diletakkan public void dispose();
sebagai aset dari aplikasi. Meembaca atau }
menulis suatu berkas merupakan hal yang
Gambar 4. Kode Program Audio
mendasar dalam pembuatan aplikasi multimedia.
Dalam pemrograman java, mekanisme yang 2.4 Grafis
sering digunakan adalah dengan membuat instan
Bagian ini merupakan bagian yang
dari InputStream dan OutputStream. Adapun
kompleks berkaitan dengan aplikasi yang
interface yang menangani berkas I/O
hendak dibuat. Namun secara khusus bertugas
ditunjukkan pada kode program berikut ini.
mengelelola bagaimana aplikasi memuat dan
public interface FileIO { menampilkan beragam citra ke layar. Grafis
public InputStream readAsset(String yang dibuat dalam bentuk 2 dimensi.
fileName) throws IOException; a. Koordinat Layar
public InputStream readFile(String
fileName) throws IOException; Sistem koordinat pada perangkat penampil
public OutputStream writeFile(String elektronik berbasiskan raster. Atau yang lebih
fileName) throws IOException; dikenal dengan sebutan pixel. Pixel memiliki
} dua buat atribut yaitu posisi dan warna. Posisi
dari suatu pixel inilah yang merepresentasikan
Gambar 3. Kode Program Berkas I/O koordinat dari layar penampil tersebut. Di mana
2.3 Audio berupa nilai diskrit. Koordinat ini dimulai

4 Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

dengan koordinat (0,0) dari pojok kiri atas dan  Pengkodean RGB 24-bit mendapat alokasi
selalu bernilai positif. Koordinat layar sebuah untuk satu pixel sebesar 3 atau 4 byte
perangkat ditunjukkan pada gambar 5. dengan intensitas berada pada rentang nilai 0
sampai 255. Terdapat dua buah urutan
pengkodean yaitu RGB dan BGR yang
dikenal dengan RGB888 atau BGR888 di
mana angka delaman merepresentasikan
jumlah bit untuk masing-masing elemen
Gambar 5. Koordinat layar dan VRAM warna.
b. Warna  Pengkodean RGB 16-bit mengalokasikan 2
Model warna yang diterapkan pada byte untuk satu buah pixel. Warna merah
pemrograman grafis adalah menggunakan model dan biru memiliki intensitas dengan rentang
RGB. RGB merupakan singkatan dari warna nilai 0-31 sedangkan warna hijau memiliki
merah, hijau dan biru. Untuk menghasilkan intensitas dengan rentang nilai 0-63.
warna lain maka dapat diperoleh dengan
c. Format Citra dan Kompresinya
mengkombinasikan nilai RGB seperti
ditunjukkan pada Gambar 6. Pemilihan format dari citra yang akan
digunakan sangat mempengaruhi ukuran dari
citra itu sendiri. Sehingga akan berdampak
pemborosan memori dan kinerja aplikasi
menjadi lebih berat dalam memuat citra tersebut.
Format yang paling umum dengan kompresi
yang baik dan dapat diterapkan pada sistem
android, adalah citra dengan tipe JPEG dan
PNG.
d. Penggabungan Citra
Hal terakhir yang perlu menjadi perhatian
Gambar 6. Penggabungan warna dalam menampilkan citra ke layar adalah
bagaimana menggabungkan dua buah citra.
Terdapat beberapa cara untuk Contoh penggabungan ditunjukkan pada Gambar
mengkomputasikan warna sebuah pixel ke 8.
dalam bentuk kode yang kemudian disimpan
oleh memori tergantung pada tipe data yang
hendak digunakan. Dapat berupa bilangan
pecahan maupun bilangan bulat positif. Tetapi
hal tersebut akan mempengaruhi konsumsi
Gambar 8. Penggabungan dua citra
memori. Salah satu contoh pengkodean warna
ditunjukkan seperti pada Gambar 7. Terlihat bahwa citra hasil mengandung
efek warna putih pada tepian citra dari karakter
asli. Permasalahan ini dapat dipecahkan dengan
mekanisme penggabungan gambar alpha (alpha
Gambar 7. Pengkodean warna blending). Pada kasus yang ditunjukkan gambar
8 secara teknis disebut sebagai alpha masking.
 Pengkodean RGB dengan tipe data pecahan
32-bit, sehingga satu buah pixel mendapat Dari tiga format pengkodean warna yang
alokasi memori sebesar 12-byte dengan telah dijelaskan sebelumnya, kita dapat
rentang nilai 0,0 – 1,0 menyimpan pengkodean RGB 24-bit pada 32-bit
bilangan bulat. Sehingga diperoleh 8 bit yang
belum digunakan. 8 bit tersebut kemudian

Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android 5


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

dimanfaatkan untuk menyimpan nilai alpha, Perancangan kode interface dibuat


dengan rentang nilai dari 0 sampai 255. Di mana berdasarkan kebutuhan mengolah grafis sebagai
nilai 0 adalah transparan dan nilai 255 berwarna berikut ini:
normal. Pengkodean ini kemudian dikenal
 Memuat citra dari media penyimpan
dengan ARGB8888 atau BGRA8888.
kemudian menyimpannya ke memori
Salah satu Algoritma yang digunakan
untuk menggabungkan dua buah citra dapat  Membersihkan framebuffer dan
menggunakan persamaan 1. Namun untuk menyiapkannya dengan sebuah warna
kesederhanaan logika komputasi, persamaan ini sehingga tidak ada sisa dari frame
hanya digunakan untuk mengkomputasi nilai sebelumnya.
pixel R, G dan B tanpa mengkomputasi nilai  Mengatur nilai pixel pada area pixel
pixel alpha. tertentu dengan warna tertentu
red = src.red * src.alpha + dst.red * (1 –  Gambar garis dan persegi panjang pada
src.alpha) framebuffer
blue = src.green * src.alpha + dst.green * (1 –  Gambar citra yang telah dimuat ke dalam
src.alpha) memori sebelumnya pada framebuffer
green = src.blue * src.alpha + dst.blue * (1 –  Baca ukuran dimensi dari framebuffer
src.alpha) ……… (1)
Dari kebutuhan di atas, kemudian dibuat dalam
Src dan dst adalah nilai pixel dari citra bentuk kode interface seperti pada kode berikut
asal dan citra tujuan yang hendak digabung. ini.
Contoh penerapan persamaan 1 ditunjukkan
pada Gambar 9. Di mana mengilustrasikan public interface Graphics {
penggabungan dua buah citra dengan warna public static enum PixmapFormat {
merah muda dan hijau terang, menghasilkan ARGB8888, ARGB4444,
citra dengan warna hijau gelap. RGB565
}
public Pixmap newPixmap(String
fileName, PixmapFormat format);
Gambar 9. Penggabungan dua warna public void clear(int color);
public void drawPixel(int x, int y, int
Jika diperhatikan, bahwa persamaan 1 color);
tersebut memiliki komputasi perkalian yang public void drawLine(int x, int y, int
banyak. Jika memungkinkan hal ini harus x2, int y2, int color);
dihindari dalam proses penggabungan citra public void drawRect(int x, int y, int
terlebih jika media komputasi berupa perangkat width, int height, int color);
mobile. Kita dapat melakukan proses pra- public void drawPixmap(Pixmap
perkalian antara nilai pixel RGB dengan nilai pixmap, int x, int y, int srcX, int srcY,
alpha-nya. int srcWidth, int
Untuk menampilkan citra dengan API srcHeight);
grafis harus memperhatikan persamaan yang public void drawPixmap(Pixmap
sesuai. Citra yang hendak digunakan pun harus pixmap, int x, int y);
dipastikan apakah mengandung nilai alpha atau public int getWidth();
tidak. Berkaitan dengan hal ini, API grafis yang public int getHeight();
dimiliki sistem Android memberikan kemudahan }
dalam proses penggabungan citra.
public interface Pixmap {
public int getWidth();

6 Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

public int getHeight(); public abstract class Layar {


public PixmapFormat getFormat(); protected final ApMultimedia apmult;
public void dispose(); public Screen(ApMultimedia apmult) {
} this.apmult = apmult;
}
Gambar 9. Kode Program Mengolah Grafis public abstract void update(float
2.5 Pengelola Tampilan deltaTime);
public abstract void present(float
Modul masukan ini Bertanggungjawab
deltaTime);
untuk mengelola pembuatan tampilan dan
public abstract void pause();
mengatur bagaimana menutup sebuah tampilan,
public abstract void resume();
memberhentikan atau menjalankan kembali
public abstract void dispose();
sebuah tampilan. Sekaligus sebagai program
}
utama yang menggabungkan interface-interface
dan digunakan untuk membuat sebuah aplikasi Gambar 11. Kode Program Satu Tampilan dalam
multimedia. Satu Layar
Adapun fitur yang diperlukan dalam 3. Implementasi Aplikasi Multimedia
membangun aplikasi multimedia adalah sebagai
Implementasi dari masing-masing
berikut:
interface adalah sebagai berikut
 Menyiapkan window dan antarmuka
a. Implementasi Masukan
pengguna dan mengesetnya agar dapat
menangkap window dan event masukan. public class ImplInput implements Input {
AccelerometerHandler accelHandler;
 Jalankan thread utama
KeyboardHandler keyHandler;
 Rekam setiap aktivitas tampilan layar TouchHandler touchHandler;
public ImplInput(Context context, View
 Berikan akses penuh untuk masing-
view, float scaleX, float scaleY) {
masing modul lainnya
accelHandler = new
Kode interface untuk rancangan di atas AccelerometerHandler(context);
ditunjukkan pada kode program berikut ini keyHandler = new
KeyboardHandler(view);
public interface ApMultimedia { if (Integer.parseInt(VERSION.SDK) <
public Input getInput(); 5)
public FileIO getFileIO(); touchHandler = new
public Graphics getGraphics(); SingleTouchHandler(view, scaleX, scaleY);
public Audio getAudio(); else touchHandler = new
public void setScreen(Screen screen); MultiTouchHandler(view, scaleX, scaleY);
public Screen getCurrentScreen(); }
public Screen getStartScreen(); public boolean isKeyPressed(int keyCode)
} {return keyHandler.isKeyPressed(keyCode);}
Gambar 10. Kode Program Mengelola Tampilan public boolean isTouchDown(int pointer)
{return touchHandler.isTouchDown(pointer);
Bagian terakhir adalah pembuatan kelas abstrak }
Layar. Pemilihan penggunaan kelas abstrak public int getTouchX(int pointer) {return
daripada menggunakan kelas interface adalah touchHandler.getTouchX(pointer);}
untuk proses implementasi pemakaian layar public int getTouchY(int pointer) {return
yang hanya dapat menampilkan satu tampilan touchHandler.getTouchY(pointer);}
dalam satu layar. public float getAccelX() {return
accelHandler.getAccelX();}

Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android 7


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

public float getAccelY() {return public ImplAudio(Activity activity) {


accelHandler.getAccelY();} activity.setVolumeControlStream(Audio
public float getAccelZ() {return Manager.STREAM_MUSIC);
accelHandler.getAccelZ();} this.assets = activity.getAssets();
public List <TouchEvent> getTouchEvents() this.soundPool = new SoundPool(20,
{return touchHandler.getTouchEvents();} AudioManager.STREAM_MUSIC, 0);
public List <KeyEvent> getKeyEvents() }
{return keyHandler.getKeyEvents();} @Override
} public Music newMusic(String
filename) {
Gambar 12. Kode Program Interface Masukan try { } catch (IOException e) {
b. Implementasi Berkas I/O
}}
public class ImplFileIO implements FileIO { @Override
Context context; public Sound newSound(String
AssetManager assets; filename) {
String externalStoragePath; try {
public ImplFileIO(Context context) { AssetFileDescriptor assetDescriptor =
this.context = context; this.assets = assets.openFd(filename);
context.getAssets(); int soundId =
this.externalStoragePath = soundPool.load(assetDescriptor, 0);
Environment.getExternalStorageDirectory() return new ImplSound(soundPool,
.getAbsolutePath() + soundId);
File.separator;} } catch (IOException e) {
public InputStream readAsset(String fileName) throw new
throws IOException { RuntimeException("Couldn't load sound '" +
return assets.open(fileName); } filename + "'");
public InputStream readFile(String fileName) }}
throws IOException { }
return new
FileInputStream(externalStoragePath + Gambar 14. Kode Program Interface Audio
fileName); } public class ImplSound implements SuaraEfek
public OutputStream writeFile(String fileName) {
throws IOException { int soundId; SoundPool soundPool;
return new public ImplSound(SoundPool soundPool, int
FileOutputStream(externalStoragePath + soundId) {
fileName); } this.soundId = soundId;this.soundPool =
public SharedPreferences getPreferences() { soundPool;}
return @Override
PreferenceManager.getDefaultSharedPreference public void play(float volume)
s(context); } {soundPool.play(soundId, volume, volume, 0, 0,
} 1); }
Gambar 13. Kode Progam Interface I/O @Override
public void dispose()
c. Implementasi Audio, SuaraEfek, SuaraLatar {soundPool.unload(soundId); }
public class ImplAudio implements Audio { }
AssetManager assets; Gambar 15. Kode Program Interface Suara Efek
SoundPool soundPool;
public class ImplMusic implements SuaraLatar,
OnCompletionListener {

8 Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

MediaPlayer mediaPlayer; Canvas canvas; Paint paint;


boolean isPrepared = false; Rect srcRect = new Rect(); Rect
public ImplMusic(AssetFileDescriptor dstRect = new Rect();
assetDescriptor) { public ImplGraphics(AssetManager
mediaPlayer = new MediaPlayer(); assets, Bitmap frameBuffer) {
try {} catch (Exception e) {throw new this.assets = assets;this.frameBuffer =
RuntimeException("Couldn't load music"); frameBuffer;
}} this.canvas = new
@Override Canvas(frameBuffer);this.paint = new Paint();
public void play() {if }
(mediaPlayer.isPlaying())return;}} public Pixmap newPixmap(String fileName,
@Override PixmapFormat format) {
public void stop() try {in = assets.open(fileName);
{mediaPlayer.stop();synchronized (this) …
{isPrepared = false;}} in.close();
@Override } catch (IOException e) {}}}
public void pause() {if return new AndroidPixmap(bitmap,
(mediaPlayer.isPlaying())mediaPlayer.pause();} format);
@Override }
public void setLooping(boolean isLooping) public void clear(int color) {
{mediaPlayer.setLooping(isLooping); } canvas.drawRGB((color & 0xff0000) >> 16,
@Override (color & 0xff00) >> 8,
public void setVolume(float volume) (color & 0xff)); }
{mediaPlayer.setVolume(volume, volume); public void drawPixel(int x, int y, int color) {
} paint.setColor(color);canvas.drawPoint(
@Override x, y, paint); }
public boolean isPlaying() {return public void drawLine(int x, int y, int x2, int y2,
mediaPlayer.isPlaying(); } int color) {
@Override paint.setColor(color);canvas.drawLine(x
public boolean isStopped() {return , y, x2, y2, paint);}
!isPrepared; } public void drawRect(int x, int y, int
@Override width, int height, int color) {
public boolean isLooping() {return paint.setColor(color);paint.setStyle(Styl
mediaPlayer.isLooping(); } e.FILL);
@Override canvas.drawRect(x, y, x + width - 1, y +
public void dispose() {if width - 1, paint);}
(mediaPlayer.isPlaying())mediaPlayer.stop(); public void drawPixmap(Pixmap
mediaPlayer.release();} pixmap, int x, int y, int srcX, int srcY,
@Override int srcWidth, int
public void onCompletion(MediaPlayer arg0) srcHeight) {
{synchronized (this) {isPrepared = false;}} srcRect.left = srcX;srcRect.top = srcY;
} srcRect.right = srcX + srcWidth - 1;
srcRect.bottom = srcY + srcHeight - 1;
Gambar 16. Kode Program Interface Suara Latar dstRect.left = x; dstRect.top = y;
d. Implementasi Grafis dstRect.right = x + srcWidth –
1;dstRect.bottom = y + srcHeight - 1;
public class ImplGraphics implements canvas.drawBitmap(((AndroidPixmap)
Graphics{ pixmap).bitmap, srcRect, dstRect, null);}
AssetManager assets; Bitmap public void drawPixmap(Pixmap
frameBuffer; pixmap, int x, int y) {

Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android 9


Jurnal Teknologi Informasi DINAMIK Volume 20, No.1, Januari 2015 : 1-10 ISSN : 0854-9524

canvas.drawBitmap(((AndroidPixmap)p @Override
ixmap).bitmap, x, y, null);} public Screen getStartScreen() {return null;
public int getWidth() {return }
frameBuffer.getWidth();} }
public int getHeight() {return
Gambar 18. Kode Program Interface Layar
frameBuffer.getHeight();}
} SIMPULAN
Gambar 17. Kode Program Interface Grafis Penelitian ini menghasilkan sebuah struktur
kerangka aplikasi yang selanjutnya dapat
e. Implementasi Layar dugunakan untuk membangun suatu aplikasi
public class AndroidApMultimedia extends multimedia secara terintegrasi. Pengembangan
Activity implements ApMultimedia{ dilakukan secara modular sehingga
… memudahkan dalam pembaruan fitur dari
} aplikasi tanpa harus merubah struktur program.
@Override Selanjutnya diharapkan dapat dikembangkan
public void onResume() menjadi sebuah framework yang lebih
{super.onResume();wakeLock.acquire(); menyeluruh.
screen.resume(); DAFTAR PUSTAKA
renderView.resume(); }
@Override Friesen, J., 2010. Learn Java for Android
public void onPause() {super.onPause(); Development. Apress Publishing, New
wakeLock.release(); York.
renderView.pause(); screen.pause(); Lemay, L., Perkins, C., L., 1996. Teach Yourself
if (isFinishing()) Java in 21 days. Sams.net Publishing,
screen.dispose();} Indianapolis.
@Override
public Input getInput() {return input;} Mahmoud, O., 2001. Learning Wireless Java.
@Override O’reilly & Association, California.
public FileIO getFileIO() {return fileIO;} Nugroho, Y., 2009. Handout: Pengenalan
@Override Bahasa Java – Inheritance Interface, ITB,
public Graphics getGraphics() { return Bogor
graphics; }
@Override Zechner, M., Green, R., 2012. Begining Android
public Audio getAudio() {return audio; } Games, Second Edition. Apress Media,
@Override New York
public void setScreen(Screen screen) { _http://docs.oracle.com/javase/tutorial/java/conc
if (screen == null) eps/interface.html diakses pada 5 Mei
throw new 2015 pukul 10.10wib
IllegalArgumentException("Screen must not be
null");
this.screen.pause();
this.screen.dispose();
screen.resume();
screen.update(0);
this.screen = screen;
}
@Override
public Screen getCurrentScreen() { return
screen;}

10 Implementasi Java Interface pada Pembuatan Aplikasi Multimedia Berbasis Android

Вам также может понравиться