Create Music player android apps - Android studio

Create Music/Audio Player android Application

 Using Android Studio.



What is Music / Audio player Android apps:


Music Player is An Application that enables to read internal Storage and find audio file and listing on music player array list after playable to any audio file (.mp3 or . wav ) Song.

Music Player android app Icon is below.


Music Player Icon


Here Music Player List Icon is below :











Requirement for Create Music Player Androids application :

  • Hardware
    • Running Windows LapTop or DeskTop
    • Running Android Mobile for Testing
    • Internet Connection
  • Software
    • Android Studio
    • java jre and jdk (8.0)
    • External Storage permission Link
    •  
  • Soft Skill
    • Android Studio Skill
    • Java Programming skill
    • XML Language Skill
    • UI Designing Skill


Now here Starting Source Code Details.

  • Step 1
    • Start Android Studio
    • Create New Project
Empty Project Icon in Android studio

    • Enter Project Name
    • Enter Name in the Project name
      •  just like project name Music Player

  • Step 2
    • insert the Source code in XML File (in file activity_main.xml)
    • just file source given below:
      • F:\Program\AndroidStudio\Media\MusicPlayer\app\src\main\res\layout\activity_main.xml


    • Source code as given below 


    <?xml version="1.0" encoding="utf-8"?>
    <RelativeLayout 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:padding="10dp" tools:context=".MainActivity" 
    <ListView 
    android:id="@+id/mySongListView" 
    android:layout_width="match_parent"
    android:layout_height="match_parent">

     </ListView>
     </RelativeLayout>

    • 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 :


      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

      1. open project file

      2. then click right mouce button
      3. and click on new
      4. 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 :













      Post a Comment

      0 Comments

      Close Menu