Rabu, 20 November 2019

Tugas Mingguan Mata Kuliah Mobile Programing Kelas 06TPLP001

1. Deskripsi Aplikasi

Aplikasi ini dibuat untuk memenuhi tugas mingguan, Aplikasi pemutar musik ini dibuat menggunakan Android studio, menggunakan custom listview dan juga dapat membaca lagu dengan sendirinya tanpa harus memasukan lagu pada saat pembuatan aplikasi.

2. Screenshoot Interface Aplikasi



3. Source Code XML dan Java


PlayerActivity.java

package com.heavenstudio.Multimedia;
import android.annotation.SuppressLint;import android.content.Intent;import android.graphics.PorterDuff;import android.media.MediaPlayer;import android.net.Uri;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.MenuItem;import android.view.View;import android.widget.Button;import android.widget.SeekBar;import android.widget.TextView;
import java.io.File;import java.util.ArrayList;
public class PlayerActivity extends AppCompatActivity{
    static MediaPlayer mp;//assigning memory loc once or else multiple songs will play at once    int position;    SeekBar sb;    ArrayList<File> mySongs;    Thread updateSeekBar;    Button pause,next,previous;    TextView songNameText;
    String sname;    @SuppressLint("NewApi")    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.music_player_ui);
        songNameText = (TextView) findViewById(R.id.txtSongLabel);
        getSupportActionBar().setDisplayHomeAsUpEnabled(true);        getSupportActionBar().setDisplayShowHomeEnabled(true);        getSupportActionBar().setTitle("Now Playing");
        pause = (Button)findViewById(R.id.pause);
        previous = (Button)findViewById(R.id.previous);        next = (Button)findViewById(R.id.next);
        sb=(SeekBar)findViewById(R.id.seekBar);

        updateSeekBar=new Thread(){            @Override            public void run(){                int totalDuration = mp.getDuration();                int currentPosition = 0;                while(currentPosition < totalDuration){                    try{                        sleep(500);                        currentPosition=mp.getCurrentPosition();                        sb.setProgress(currentPosition);                    }                    catch (InterruptedException e){
                        }                }            }        };



        if(mp != null){            mp.stop();            mp.release();        }        Intent i = getIntent();        Bundle b = i.getExtras();

        mySongs = (ArrayList) b.getParcelableArrayList("songs");
        sname = mySongs.get(position).getName().toString();
        String SongName = i.getStringExtra("songname");        songNameText.setText(SongName);        songNameText.setSelected(true);
        position = b.getInt("pos",0);        Uri u = Uri.parse(mySongs.get(position).toString());
        mp = MediaPlayer.create(getApplicationContext(),u);        mp.start();        sb.setMax(mp.getDuration());        updateSeekBar.start();        sb.getProgressDrawable().setColorFilter(getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.MULTIPLY);        sb.getThumb().setColorFilter(getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.SRC_IN);

        sb.setOnSeekBarChangeListener(new                                              SeekBar.OnSeekBarChangeListener() {                                                  @Override                                                  public void onProgressChanged(SeekBar seekBar, int i,                                                                                boolean b) {                                                  }                                                  @Override                                                  public void onStartTrackingTouch(SeekBar seekBar) {                                                  }                                                  @Override                                                  public void onStopTrackingTouch(SeekBar seekBar) {                                                      mp.seekTo(seekBar.getProgress());
                                                  }                                              });        pause.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                sb.setMax(mp.getDuration());                if(mp.isPlaying()){                    pause.setBackgroundResource(R.drawable.ic_play_arrow_black_24dp);                    mp.pause();
                }                else {                    pause.setBackgroundResource(R.drawable.pause);                    mp.start();                }            }        });
        next.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                mp.stop();                mp.release();                position=((position+1)%mySongs.size());                Uri u = Uri.parse(mySongs.get( position).toString());               // songNameText.setText(getSongName);                mp = MediaPlayer.create(getApplicationContext(),u);
                sname = mySongs.get(position).getName().toString();                songNameText.setText(sname);
                try{                    mp.start();                }catch(Exception e){}
            }        });        previous.setOnClickListener(new View.OnClickListener() {            @Override            public void onClick(View v) {                //songNameText.setText(getSongName);                mp.stop();                mp.release();
                position=((position-1)<0)?(mySongs.size()-1):(position-1);                Uri u = Uri.parse(mySongs.get(position).toString());                mp = MediaPlayer.create(getApplicationContext(),u);                sname = mySongs.get(position).getName().toString();                songNameText.setText(sname);                mp.start();            }        });

    }
     @Override    public boolean onOptionsItemSelected(MenuItem item) {        if(item.getItemId()==android.R.id.home){           onBackPressed();        }
        return super.onOptionsItemSelected(item);    }}

Tunes.Java

package com.heavenstudio.Multimedia;
import android.Manifest;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.content.Intent;import android.os.Environment;import android.view.View;import android.widget.AdapterView;import android.widget.ArrayAdapter;import android.widget.ListView;
import com.karumi.dexter.Dexter;import com.karumi.dexter.PermissionToken;import com.karumi.dexter.listener.PermissionDeniedResponse;import com.karumi.dexter.listener.PermissionGrantedResponse;import com.karumi.dexter.listener.PermissionRequest;import com.karumi.dexter.listener.single.PermissionListener;

import java.io.File;import java.util.ArrayList;public class Tunes extends AppCompatActivity {    ListView listView;    String[] items;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_tunes);        listView = (ListView) findViewById(R.id.listView);

        Dexter.withActivity(this)                .withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)                .withListener(new PermissionListener() {                    @Override                    public void onPermissionGranted(PermissionGrantedResponse response) {
                        display();                    }
                    @Override                    public void onPermissionDenied(PermissionDeniedResponse response) {                        // check for permanent denial of permission                        if (response.isPermanentlyDenied()) {
                        }                    }
                    @Override                    public void onPermissionRationaleShouldBeShown(PermissionRequest permission, PermissionToken token) {                        token.continuePermissionRequest();                    }                }).check();

    }
    public ArrayList<File> findSong(File root){        ArrayList<File> at = new ArrayList<File>();        File[] files = root.listFiles();        for(File singleFile : files){            if(singleFile.isDirectory() && !singleFile.isHidden()){                at.addAll(findSong(singleFile));            }            else{                if(singleFile.getName().endsWith(".mp3") ||                        singleFile.getName().endsWith(".wav")){                    at.add(singleFile);                }            }        }        return at;    }    void display(){        final ArrayList<File> mySongs = findSong(Environment.getExternalStorageDirectory());        items = new String[ mySongs.size() ];        for(int i=0;i<mySongs.size();i++){            //toast(mySongs.get(i).getName().toString());            items[i] = mySongs.get(i).getName().toString().replace(".mp3","").replace(".wav","");        }        ArrayAdapter<String> adp = new                ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,items);        listView.setAdapter(adp);

        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {            @Override            public void onItemClick(AdapterView<?> adapterView, View view, int                    position, long l) {
                String songName = listView.getItemAtPosition(position).toString();                startActivity(new Intent(getApplicationContext(),PlayerActivity.class)
                        .putExtra("pos",position).putExtra("songs",mySongs).putExtra("songname",songName));            }        });    }


}

activity_tunes.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:id="@+id/activity_tune"    android:layout_width="match_parent"    android:layout_height="match_parent"
    tools:context="com.heavenstudio.Multimedia.Tunes">
    <ListView        android:layout_width="match_parent"        android:layout_height="match_parent"        android:layout_alignParentTop="true"        android:layout_alignParentLeft="true"        android:layout_alignParentStart="true"        android:id="@+id/listView" />
</RelativeLayout>

music_player_ui.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    android:orientation="vertical"    android:layout_width="match_parent"    android:weightSum="10"    android:layout_height="match_parent">
    <LinearLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:gravity="center"        android:padding="10dp"        android:orientation="vertical"        android:layout_weight="7">
        <ImageView            android:layout_width="250dp"            android:layout_height="250dp"            android:src="@drawable/cover_art"            android:id="@+id/album_art"
            />
        <TextView            android:id="@+id/txtSongLabel"            android:layout_width="match_parent"            android:layout_height="wrap_content"            android:text="song name"            android:singleLine="true"            android:marqueeRepeatLimit="marquee_forever"            android:layout_marginTop="20dp"            android:textSize="22sp"            android:textAlignment="center"            android:ellipsize="marquee"            android:scrollHorizontally="true"            android:textColor="@color/colorPrimary"            />
    </LinearLayout>
    <LinearLayout        android:layout_width="match_parent"        android:layout_height="0dp"        android:layout_weight="3"        >        <RelativeLayout            android:layout_width="match_parent"            android:layout_height="match_parent"            android:padding="5dp">
            <SeekBar                android:layout_alignParentBottom="true"                android:id="@+id/seekBar"                android:layout_width="match_parent"                android:layout_height="wrap_content"                android:layout_marginBottom="40dp"                />            <Button                android:layout_marginTop="5dp"                android:layout_width="60dp"                android:layout_height="60dp"                android:layout_centerHorizontal="true"                android:background="@drawable/pause"                android:id="@+id/pause"
               />
            <Button
                android:id="@+id/next"                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_toRightOf="@+id/pause"                android:background="@drawable/ic_skip_next_black_24dp"                android:layout_marginTop="15dp"                android:layout_marginLeft="20dp"                />
            <Button                android:id="@+id/previous"                android:layout_width="40dp"                android:layout_height="40dp"                android:layout_marginTop="15dp"                android:layout_marginRight="20dp"                android:layout_toLeftOf="@+id/pause"                android:background="@drawable/ic_skip_previous_black_24dp" />
        </RelativeLayout>
    </LinearLayout>
</LinearLayout>

Sekian dari saya, kurang lebihnya mohon maaf. Wassallam :)