Sunday, November 2, 2014

Aplikasi Multimedia

1.      Cara Kerja


Applikasi ini bekerja dengan cara membaca file musik pada folder Music yang terdapat pada memory internal HP tetapi hanya file yang mempunyai ekstensi yang telah di tentukan. Kemudian menyimpan nama file musik tersebut pada array dan memanggil nya secara sekuensial.

1.      Source code

main.xml

   <?xml version="1.0" encoding="utf-8"?>
   <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/screen" android:layout_width="fill_parent" android:layout_height="fill_parent" android:background="#FFFFFF">

    <Button
        android:id="@+id/btnPlay"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnPrevious"
        android:layout_alignBottom="@+id/btnPrevious"
        android:layout_centerHorizontal="true"
        android:background="@drawable/play"
        android:onClick="click" />

    <Button
        android:id="@+id/btnNext"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignBaseline="@+id/btnPlay"
        android:layout_alignBottom="@+id/btnPlay"
        android:layout_marginLeft="25dp"
        android:layout_toRightOf="@+id/btnPlay"
        android:background="@drawable/next"
        android:onClick="click" />

    <Button
        android:id="@+id/btnPrevious"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_marginRight="26dp"
        android:layout_toLeftOf="@+id/btnPlay"
        android:background="@drawable/previous"
        android:onClick="click" />

   </RelativeLayout>



AndroidManifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
      package="com.technegames.mymediaplayer"
      android:versionCode="1"
      android:versionName="1.0">
    <uses-sdk android:minSdkVersion="8" android:targetSdkVersion="18" />

    <application android:label="@string/app_name">
        <activity android:name="com.example.musicplayer.MusicPlayer" android:configChanges="orientation|keyboardHidden"
                  android:label="@string/app_name">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    </application>
    <uses-permission android:name="android.permission.WAKE_LOCK" />
</manifest>


Music.java
package com.example.musicplayer;

import java.io.FileDescriptor;
import java.io.IOException;

import android.content.res.AssetFileDescriptor;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnCompletionListener;

public class Music implements OnCompletionListener{
       MediaPlayer mediaPlayer;
       boolean isPrepared = false;
      
       public Music(AssetFileDescriptor assetDescriptor){
              mediaPlayer = new MediaPlayer();
              try{
                     mediaPlayer.setDataSource(assetDescriptor.getFileDescriptor(), assetDescriptor.getStartOffset(), assetDescriptor.getLength());
                     mediaPlayer.prepare();
                     isPrepared = true;
                     mediaPlayer.setOnCompletionListener(this);
              } catch(Exception ex){
                     throw new RuntimeException("Tidak dapat meng-load lagu");
              }
       }
      
       public Music(FileDescriptor fileDescriptor){
              mediaPlayer = new MediaPlayer();
              try{
                     mediaPlayer.setDataSource(fileDescriptor);
                     mediaPlayer.prepare();
                     isPrepared = true;
                     mediaPlayer.setOnCompletionListener(this);
              } catch(Exception ex){
                     throw new RuntimeException("Tidak dapat meng-load lagu");
              }
       }
      
       public void onCompletion(MediaPlayer mediaPlayer) {
              synchronized(this){
                     isPrepared = false;
              }
       }

       public void play() {
              if(mediaPlayer.isPlaying()){
                     return;
              }
              try{
                     synchronized(this){
                           if(!isPrepared){
                                  mediaPlayer.prepare();
                           }
                           mediaPlayer.start();
                     }
              } catch(IllegalStateException ex){
                     ex.printStackTrace();
              } catch(IOException ex){
                     ex.printStackTrace();
              }
       }

       public void stop() {
              mediaPlayer.stop();
              synchronized(this){
                     isPrepared = false;
              }
       }
      
       public void switchTracks(){
              mediaPlayer.seekTo(0);
              mediaPlayer.pause();
       }
      
       public void pause() {
              mediaPlayer.pause();
       }

       public boolean isPlaying() {
              return mediaPlayer.isPlaying();
       }
      
       public boolean isLooping() {
              return mediaPlayer.isLooping();
       }
      
       public void setLooping(boolean isLooping) {
              mediaPlayer.setLooping(isLooping);
       }

       public void setVolume(float volumeLeft, float volumeRight) {
              mediaPlayer.setVolume(volumeLeft, volumeRight);
       }

       public void dispose() {
              if(mediaPlayer.isPlaying()){
                     stop();
              }
              mediaPlayer.release();
       }
}

MusicPlayer.java

package com.example.musicplayer;

import java.io.File;
import java.io.FileDescriptor;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;

import com.technegames.mymediaplayer.R;

import android.app.Activity;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.content.res.AssetManager;
import android.graphics.drawable.Drawable;
import android.media.AudioManager;
import android.os.Bundle;
import android.os.Environment;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;
import android.view.Menu;
import android.view.MenuItem;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.Toast;

public class MusicPlayer extends Activity {
       WakeLock wakeLock;
       private static final String[] EXTENSIONS = { ".mp3", ".mid", ".wav", ".ogg", ".mp4", ".m4a" }; //Playable Extensions
       List<String> trackNames;
       File path;
       File path2;
       Music track;
       Button btnPlay;
       boolean isTuning;
       int currentTrack;
      
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
              getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN);
              setVolumeControlStream(AudioManager.STREAM_MUSIC);
              PowerManager powerManager = (PowerManager) getSystemService(Context.POWER_SERVICE);
              wakeLock = powerManager.newWakeLock(PowerManager.FULL_WAKE_LOCK, "Lexiconda");
        setContentView(R.layout.main);
        initialize();
    }
   
    @Override
    public void onResume(){
       super.onResume();
       wakeLock.acquire();
    }
      
    @Override
       public void onPause(){
              super.onPause();
              wakeLock.release();
              if(track != null){
                     if(track.isPlaying()){
                           track.pause();
                           isTuning = false;
                           btnPlay.setBackgroundResource(R.drawable.play);
                     }
                     if(isFinishing()){
                           track.dispose();
                            finish();
                     }
              } else{
                     if(isFinishing()){
                           finish();
                     }
              }
       }
   
    private void initialize(){
        btnPlay = (Button) findViewById(R.id.btnPlay);
        btnPlay.setBackgroundResource(R.drawable.play);
       trackNames = new ArrayList<String>();
       currentTrack = 0;
       addTracks(getTracks());
       loadTrack();
    }
   
    private String[] getTracks(){
              if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED)
                     || Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED_READ_ONLY)){
              path = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_MUSIC);
              path2 = Environment.getExternalStoragePublicDirectory(Environment.DIRECTORY_PICTURES);
                     String[] temp = path.list();
                     return temp;
              } else{
                     Toast.makeText(getBaseContext(), "SD Card is either mounted elsewhere or is unusable", Toast.LENGTH_LONG).show();
              }
      
       return null;
    }
   
    private void addTracks(String[] temp){
       if(temp != null){
                     for(int i = 0; i < temp.length; i++){
                           if(trackChecker(temp[i])){
                                  trackNames.add(temp[i]);
                           }
                     }
                     Toast.makeText(getBaseContext(), "Loaded " + Integer.toString(trackNames.size()) + " Tracks", Toast.LENGTH_SHORT).show();
              }
    }
   
    private boolean trackChecker(String trackToTest){
       for(int j = 0; j < EXTENSIONS.length; j++){
                     if(trackToTest.contains(EXTENSIONS[j])){
                           return true;
                     }
              }
       return false;
    }
   
    private void loadTrack(){
       if(track != null){
              track.dispose();
       }
       if(trackNames.size() > 0){
              track = loadMusic(1);
       }
    }
   
    private Music loadMusic(int type){
       switch(type){
       case 1:
              try{
                     FileInputStream fis = new FileInputStream(new File(path, trackNames.get(currentTrack)));
                     FileDescriptor fileDescriptor = fis.getFD();
                     return new Music(fileDescriptor);
              } catch(IOException e){
                     e.printStackTrace();
                     Toast.makeText(getBaseContext(), "Error Loading " + trackNames.get(currentTrack), Toast.LENGTH_LONG).show();
              }
              return null;
       default:
              return null;
       }
    }
   
   
    public void click(View view){
              int id = view.getId();
              switch(id){
              case R.id.btnPlay:
                     synchronized(this){
                           if(isTuning){
                                  isTuning = false;
                                  btnPlay.setBackgroundResource(R.drawable.play);
                                   track.pause();
                           } else{
                                  isTuning = true;
                                  btnPlay.setBackgroundResource(R.drawable.pause);
                                  playTrack();
                           }
                     }
                     return;
              case R.id.btnPrevious:
                     setTrack(0);
                     loadTrack();
                     playTrack();
                     return;
              case R.id.btnNext:
                     setTrack(1);
                     loadTrack();
                     playTrack();
                     return;
              default:
                     return;
              }
       }
   
    private void setTrack(int direction){
       if(direction == 0){
              currentTrack--;
                     if(currentTrack < 0){
                           currentTrack = trackNames.size()-1;
                     }
       } else if(direction == 1){
              currentTrack++;
                     if(currentTrack > trackNames.size()-1){
                           currentTrack = 0;
                     }
       }
    }
   
    private void playTrack(){
       if(isTuning && track != null){
                     track.play();
                     Toast.makeText(getBaseContext(), "Playing " + trackNames.get(currentTrack).substring(0, trackNames.get(currentTrack).length()-4), Toast.LENGTH_SHORT).show();
              }
    }

   
}

1.      Screenshot


No comments:

Post a Comment