- Step 3
- insert the Source code in JAVA File (in file MainActivity.java)
- just file source given below :
- F:\Program\AndroidStudio\Media\MusicPlayer\app\src\main\java\com\example\musicplayer\MainActivity.java
- Source code as Given Below : MainActivityjava
package com.example.musicplayer;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.Manifest;
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 MainActivity extends AppCompatActivity {
ListView myListViewForSongs;
String[] items;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
myListViewForSongs = (ListView) findViewById(R.id.mySongListView);
runtimePermission();
}
public void runtimePermission() {
Dexter.withContext(this)
.withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
display();
}
@Override
public void onPermissionDenied(PermissionDeniedResponse permissionDeniedResponse) {
}
@Override
public void onPermissionRationaleShouldBeShown(PermissionRequest
permissionRequest,PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();
}
}).check();
}
public ArrayList<File> findSong(File file){
ArrayList<File> arrayList = new ArrayList<>();
File[] files = file.listFiles();
for (File singleFile: files) {
if (singleFile.isDirectory() && !singleFile.isHidden()){
arrayList.addAll(findSong(singleFile));
}
else {
if (singleFile.getName().endsWith(".mp3") || singleFile.getName().endsWith(".wav"))
{
arrayList.add(singleFile);
}
}
}
return arrayList;
}
void display() {
final ArrayList<File> mySongs = findSong(Environment.getExternalStorageDirectory());
items = new String[mySongs.size()];
for(int i=0;i<mySongs.size();i++) {
items[i] = mySongs.get(i).getName().replace(".mp3", "").replace(".wav", "");
}
ArrayAdapter<String> myAdapter = new ArrayAdapter<String>
(this,android.R.layout.simple_list_item_1,items);
myListViewForSongs.setAdapter(myAdapter);
myListViewForSongs.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int i, long id) {
String songName = myListViewForSongs.getItemAtPosition(i).toString();
startActivities(new Intent[]{new Intent(getApplicationContext(),
PlayerActivity.class).putExtra("songs", mySongs).putExtra("songname",
songName).putExtra("pos",i)});
}
});
}
}
Step 4 :
create new java class file with empty acitivity
name as PlayerActivity
AS
PlayerActivity.java source code as below :
public package com.example.musicplayer;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.graphics.PorterDuff;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
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;
import java.util.concurrent.TimeUnit;
public class PlayerActivity extends AppCompatActivity {
Button btn_pause, btn_next, btn_previous ;
TextView songTextLabel,currentTimeLabel,remainingTimeLabel;
SeekBar songSeekbar, volumeBar;
static MediaPlayer myMediaPlayer;
int position;
ArrayList<File> mySongs;
Thread updateseekBar;
String sname;
@Override protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_player);
btn_pause = (Button) findViewById(R.id.pause);
btn_previous = (Button) findViewById(R.id.previous);
btn_next = (Button) findViewById(R.id.next);
songTextLabel = (TextView) findViewById(R.id.songLabel);
songSeekbar = (SeekBar) findViewById(R.id.seekBar);
currentTimeLabel = (TextView) findViewById(R.id.CTime);
remainingTimeLabel = (TextView) findViewById(R.id.RTime);
volumeBar = (SeekBar) findViewById(R.id.volumeBar);
getSupportActionBar().setTitle("Now Playing");
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
updateseekBar = new Thread() {
@Override public void run() {
int totaldurtion = myMediaPlayer.getDuration();
int currentPosition = 0;
while (currentPosition<totaldurtion) {
try {
sleep(500);
currentPosition = myMediaPlayer.getCurrentPosition();
songSeekbar.setProgress(currentPosition);
}
catch (InterruptedException e) {
e.printStackTrace();
}
}
}
};
if(myMediaPlayer!=null) {
myMediaPlayer.stop();
myMediaPlayer.release();
}
Intent i = getIntent();
Bundle bundle = i.getExtras();
mySongs = (ArrayList) bundle.getParcelableArrayList("songs");
sname = mySongs.get(position).getName().toString();
final String songName = i.getStringExtra("songname");
songTextLabel.setText(songName);
songTextLabel.setSelected(true);
position = bundle.getInt("pos",0);
Uri u = Uri.parse((mySongs.get(position).toString()));
myMediaPlayer = MediaPlayer.create(getApplicationContext(),u);
myMediaPlayer.start();
songSeekbar.setMax(myMediaPlayer.getDuration());
updateseekBar.start();
songSeekbar.getProgressDrawable().setColorFilter(
getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.MULTIPLY);
songSeekbar.getThumb().setColorFilter(
getResources().getColor(R.color.colorPrimary),PorterDuff.Mode.SRC_IN);
volumeBar.getProgressDrawable().setColorFilter(
getResources().getColor(R.color.colorPrimary), PorterDuff.Mode.MULTIPLY);
volumeBar.getThumb().setColorFilter(getResources().getColor(
R.color.colorPrimary),PorterDuff.Mode.SRC_IN);
myMediaPlayer.setVolume(0.5f,0.5f);
volumeBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
float volumeNum = progress/100f;
myMediaPlayer.setVolume(volumeNum,volumeNum);
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
songSeekbar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
myMediaPlayer.seekTo(seekBar.getProgress());
}
});
btn_pause.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
songSeekbar.setMax(myMediaPlayer.getDuration());
if(myMediaPlayer.isPlaying()) {
btn_pause.setBackgroundResource(R.drawable.icon_play);
myMediaPlayer.pause();
}
else {
btn_pause.setBackgroundResource(R.drawable.icon_pause);
myMediaPlayer.start();
}
}
});
btn_next.setOnClickListener(new View.OnClickListener() {
@Override public void onClick(View v) {
myMediaPlayer.stop();
myMediaPlayer.release();
position = ((position+1)%mySongs.size());
Uri u = Uri.parse(mySongs.get(position).toString());
myMediaPlayer = MediaPlayer.create(getApplicationContext(),u);
sname = mySongs.get(position).getName().toString();
songTextLabel.setText(sname);
myMediaPlayer.setOnBufferingUpdateListener(
new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
songSeekbar.setSecondaryProgress(percent);
}
});
myMediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
btn_pause.setEnabled(true);
}
});
myMediaPlayer.start();
}
});
btn_previous.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
myMediaPlayer.stop();
myMediaPlayer.release();
position = ((position-1)<0)?(mySongs.size()-1):(position-1);
Uri u = Uri.parse(mySongs.get(position).toString());
myMediaPlayer = MediaPlayer.create(getApplicationContext(),u);
sname = mySongs.get(position).getName().toString();
songTextLabel.setText(sname);
myMediaPlayer.setOnBufferingUpdateListener(
new MediaPlayer.OnBufferingUpdateListener() {
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
songSeekbar.setSecondaryProgress(percent);
}
});
myMediaPlayer.setOnPreparedListener(
new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
btn_pause.setEnabled(true);
}
});
myMediaPlayer.start();
}
});
new Thread(new Runnable() {
@Override public void run() {
while (myMediaPlayer!=null) {
try {
Message msg = new Message();
msg.what = myMediaPlayer.getCurrentPosition();
handler.sendMessage(msg);
Thread.sleep(1000);
} catch (InterruptedException e) {}
}
}
}).start();
}
private Handler handler = new Handler() {
@Override public void handleMessage(@NonNull Message msg) {
super.handleMessage(msg);
int currentPosition = msg.what;
int totalTime = myMediaPlayer.getDuration();
int remainingTime = totalTime - currentPosition;
currentTimeLabel.setText(String.format("%d:%d",
TimeUnit.MILLISECONDS.toMinutes((long) currentPosition),
TimeUnit.MILLISECONDS.toSeconds((long) currentPosition) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
toMinutes((long) currentPosition))));
remainingTimeLabel.setText(String.format("- %d:%d",
TimeUnit.MILLISECONDS.toMinutes((long) remainingTime),
TimeUnit.MILLISECONDS.toSeconds((long) remainingTime) -
TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
toMinutes((long) remainingTime))));
}
};
@Override public boolean onOptionsItemSelected(@NonNull MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
}
activity_player.xml source code as below :
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:weightSum="10"
tools:context=".PlayerActivity">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="6.25"
android:gravity="center"
android:orientation="vertical">
<ImageView
android:id="@+id/SongImage"
android:layout_width="250dp"
android:layout_height="250dp"
android:layout_marginTop="30dp"
android:src="@color/cardview_dark_background">
</ImageView>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<ImageView
android:id="@+id/lowVolume"
android:layout_width="33dp"
android:layout_height="38dp"
android:layout_marginLeft="15dp"
android:background="@drawable/icon_lowvolume"
android:layout_marginTop="26dp"
/>
<SeekBar
android:id="@+id/volumeBar"
android:layout_width="280dp"
android:layout_height="wrap_content"
android:layout_marginTop="35dp"
/>
<ImageView
android:id="@+id/highVolume"
android:layout_width="35dp"
android:layout_height="40dp"
android:background="@drawable/icon_highvolume"
android:layout_marginTop="23dp"
/>
</LinearLayout>
</LinearLayout>
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight=".5">
<TextView
android:id="@+id/songLabel"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="Song Name"
android:layout_marginTop="35dp"
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:scrollHorizontally="true"
android:singleLine="true"
android:textAlignment="center"
android:textColor="@color/colorPrimary"
android:textSize="20sp"
/>
</RelativeLayout>
<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"
>
<TextView
android:layout_width="50dp"
android:layout_height="15dp"
android:id="@+id/CTime"
android:layout_marginLeft="15dp"
android:text="00:00" />
<TextView
android:layout_width="50dp"
android:layout_height="15dp"
android:id="@+id/RTime"
android:layout_marginLeft="225dp"
android:text="00:00"
android:singleLine="true"
android:layout_toRightOf="@+id/CTime"
/>
<SeekBar
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/seekBar"
android:layout_below="@+id/CTime"
/>
<Button
android:layout_width="75dp"
android:layout_height="75dp"
android:layout_centerHorizontal="true"
android:background="@drawable/icon_pause"
android:layout_marginTop="25dp"
android:id="@+id/pause"
android:layout_below="@+id/seekBar"
/>
<Button
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_marginTop="35dp"
android:layout_toRightOf="@id/pause"
android:id="@+id/next"
android:background="@drawable/icon_next"
android:layout_marginLeft="25dp"
android:layout_below="@+id/seekBar"
/>
<Button
android:layout_width="55dp"
android:layout_height="55dp"
android:layout_marginTop="35dp"
android:layout_marginRight="25dp"
android:id="@+id/previous"
android:layout_toLeftOf="@id/pause"
android:background="@drawable/icon_previous"
android:layout_below="@+id/seekBar"
/>
</RelativeLayout>
</LinearLayout>
</LinearLayout>
AndroidManifest.xml source code as below :
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.musicplayer">
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".PlayerActivity" />
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Manifest show in image for user permission below
Step 5 :
for internal Storage permission reading links peste in below in the image like
path of pesting is "H:\AndroidStudio\AndroidApps\MediaPlayer\app\build.gradle"
link : implementation 'com.karumi:dexter:6.2.0'
And after press on Sync now
(this for required internet connection)
AS given below image :
now add total button file as image below :
Process of adding button icon in android studio
- open project file
then click right mouce button
and click on new
and then click Vector Assets
as image below :
6. and clock on Vector Asset
this type create all button icon name like in image below :
0 Comments