0% found this document useful (0 votes)
80 views16 pages

Music Player App: Name - Ayush Raj Reg No - 20BCT0168

This document describes an Android music player app called SongsByAyush. It contains a list of songs fetched from external storage that play when clicked. The play song page contains controls like play/pause, previous, next buttons and a seek bar to control playback. Code files include the AndroidManifest, MainActivity for the song list, and PlaySong for playback functionality. A video demonstration of the app is provided.

Uploaded by

Ayush Raj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
80 views16 pages

Music Player App: Name - Ayush Raj Reg No - 20BCT0168

This document describes an Android music player app called SongsByAyush. It contains a list of songs fetched from external storage that play when clicked. The play song page contains controls like play/pause, previous, next buttons and a seek bar to control playback. Code files include the AndroidManifest, MainActivity for the song list, and PlaySong for playback functionality. A video demonstration of the app is provided.

Uploaded by

Ayush Raj
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 16

School of Computer Science and Engineering

BCI3003-ANDROID SECURITY
Semester: Winter 2021-22
Slot: D2

Topic –
Music Player App

Name – Ayush Raj


Reg No – 20BCT0168
Topic Description –
Music app for Even registration numbers along with all the
features .

Index –
1. AndroidManifest.xml file
2. MainActivity.java File
3. playSong.java file
4. Activity_main.xml file
Over view Of App –

Name – SongsbyAyush

Description –

This app contains a List which contains all the music


fetched from the external storage of the device .
As you Click on any of the songs the song will start and will
take you to another page i.e. play song which contains all
the buttons and a display to play your song.

The play Song Page has –


a. A image
b. seek bar for in coordination with the song
c. Text area for the song
d. Pause/play button
e. Previous button
f. Next button

Hence, all the codes for the same is given below .

A Video demonstartion for the App –

https://youtu.be/57n-xUzTN-M
Manifest File –

<?xml version="1.0" encoding="utf-8"?>


<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.songsbyayush">

// giving permission to Access the files i.e mp3 files


<uses-permission
android:name="android.permission.READ_EXTERNAL_STORAGE" />

<application
android:requestLegacyExternalStorage="true"
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/Theme.SongsByAyush">
<activity
android:name=".PlaySong"
android:parentActivityName=".MainActivity"
android:exported="false" />
<activity
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER"
/>
</intent-filter>
</activity>
</application>

</manifest>
Main Activity. Java
(This is the main Java file Which contains a list of song
taken from the external storage of the phone from the
user)
package com.example.songsbyayush;

import androidx.appcompat.app.AppCompatActivity;

import android.Manifest;
import android.content.Intent;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

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 {

@Override
protected void onCreate(Bundle savedInstanceState) {
ListView listView;
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.listView);
Dexter.withContext(this)
.withPermission(Manifest.permission.READ_EXTERNAL_STORAGE)
.withListener(new PermissionListener() {
@Override
public void
onPermissionGranted(PermissionGrantedResponse permissionGrantedResponse) {
//Toast.makeText(MainActivity.this, "Runtime
Permission Granted", Toast.LENGTH_SHORT).show();
ArrayList<File> mySongs =
fetchSongs(Environment.getExternalStorageDirectory());
String [] items = new String[mySongs.size()];
for (int i=0;i<mySongs.size();i++){
items[i] =
mySongs.get(i).getName().replace(".mp3","");
}

ArrayAdapter<String> adapter = new


ArrayAdapter<String>(MainActivity.this,
android.R.layout.simple_list_item_1, items);
listView.setAdapter(adapter);
listView.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent,
View view, int position, long id) {
Intent intent = new
Intent(MainActivity.this, PlaySong.class);
String currentSong =
listView.getItemAtPosition(position).toString();
intent.putExtra("songList",mySongs);
intent.putExtra("currentSong",currentSong);
intent.putExtra("position",position);
startActivity(intent);
}
});
}

@Override
public void onPermissionDenied(PermissionDeniedResponse
permissionDeniedResponse) {

@Override
public void
onPermissionRationaleShouldBeShown(PermissionRequest permissionRequest,
PermissionToken permissionToken) {
permissionToken.continuePermissionRequest();

}
})
.check();
}
public ArrayList<File> fetchSongs(File file) {
ArrayList arrayList = new ArrayList();
File [] songs = file.listFiles();
if(songs !=null) {
for (File myFile: songs){
if(!myFile.isHidden() && myFile.isDirectory()) {
arrayList.addAll(fetchSongs(myFile));
}
else{
if(myFile.getName().endsWith(".mp3") &&
!myFile.getName().startsWith(".")){
arrayList.add(myFile);
}
}
}
}
return arrayList;
}

}
Play song Java File
(This is the Play Song Activity File which defines all the Play,
Pause, Start, Stop features of the App)

package com.example.songsbyayush;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.SeekBar;
import android.widget.TextView;

import java.io.File;
import java.util.ArrayList;

public class PlaySong extends AppCompatActivity {


@Override
protected void onDestroy() {
super.onDestroy();
mediaPlayer.stop();
mediaPlayer.release();
updateSeek.interrupt();
}

TextView textView;
ImageView play,previous,next;
ArrayList<File> songs;
MediaPlayer mediaPlayer;
String textContent;
int position;
SeekBar seekBar;
Thread updateSeek;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_play_song);
textView = findViewById(R.id.textView);
play = findViewById(R.id.play);
previous = findViewById(R.id.previous);
next = findViewById(R.id.next);
seekBar = findViewById(R.id.seekBar);

Intent intent = getIntent();


Bundle bundle = intent.getExtras();
songs = (ArrayList)bundle.getParcelableArrayList("songList");
textContent = intent.getStringExtra("currentSong");
textView.setText(textContent);
textView.setSelected(true);
position = intent.getIntExtra("position",0);
Uri uri = Uri.parse(songs.get(position).toString());
mediaPlayer = MediaPlayer.create(this,uri);
mediaPlayer.start();

seekBar.setMax(mediaPlayer.getDuration());

seekBar.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) {
mediaPlayer.seekTo(seekBar.getProgress());
}
});

updateSeek = new Thread(){


@Override
public void run() {
int currentPosition = 0;
try {
while(currentPosition<mediaPlayer.getDuration()){
currentPosition = mediaPlayer.getCurrentPosition();
seekBar.setProgress(currentPosition);
sleep(800);
}
}
catch(Exception e){
e.printStackTrace();
}

}
};
updateSeek.start();

play.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mediaPlayer.isPlaying()){
play.setImageResource(R.drawable.play);
mediaPlayer.pause();
}
else {
play.setImageResource(R.drawable.pause);
mediaPlayer.start();
}
}
});
previous.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
mediaPlayer.release();
if(position!=0){
position = position-1;

}
else{
position = songs.size() - 1 ;
}
Uri uri = Uri.parse(songs.get(position).toString());
mediaPlayer =
MediaPlayer.create(getApplicationContext(),uri);
mediaPlayer.start();
play.setImageResource(R.drawable.pause);
seekBar.setMax(mediaPlayer.getDuration());

textContent = songs.get(position).getName().toString();
textView.setText(textContent);

}
});

next.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mediaPlayer.stop();
mediaPlayer.release();
if(position!= songs.size()-1){
position = position + 1;

}
else{
position = 0;
}
Uri uri = Uri.parse(songs.get(position).toString());
mediaPlayer =
MediaPlayer.create(getApplicationContext(),uri);
mediaPlayer.start();

play.setImageResource(R.drawable.play);
seekBar.setMax(mediaPlayer.getDuration());

textContent = songs.get(position).getName().toString();
textView.setText(textContent);
}
});

}
}
Activity main . xml file –
(This is the xml file for Play song which contains all the buttons
the photo the seekbar, and text area for the songs )
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
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"
tools:context=".PlaySong"
android:background="@drawable/bg"
>

<ImageView
android:id="@+id/imageView3"
android:layout_width="357dp"
android:layout_height="321dp"
android:layout_marginStart="31dp"
android:layout_marginTop="49dp"
android:layout_marginEnd="31dp"
android:layout_marginBottom="93dp"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/logo1" />

<TextView
android:id="@+id/textView"
android:layout_width="260dp"
android:layout_height="34dp"
android:layout_marginBottom="240dp"
android:text="TextView"
android:marqueeRepeatLimit="marquee_forever"
android:ellipsize="marquee"
android:scrollHorizontally="true"
android:singleLine="true"
android:textAlignment="center"
android:textSize="24sp"
android:textStyle="bold|italic"
android:fadingEdge="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.496"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView3"
app:layout_constraintVertical_bias="0.429" />
<LinearLayout
android:id="@+id/linearLayout"
android:layout_width="314dp"
android:layout_height="250dp"
android:layout_marginStart="8dp"
android:layout_marginEnd="8dp"
android:layout_marginBottom="38dp"
android:orientation="horizontal"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.493"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView3">

<ImageView
android:id="@+id/previous"
android:layout_width="13dp"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/previous" />

<ImageView
android:id="@+id/play"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/pause" />

<ImageView
android:id="@+id/next"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_weight="1"
app:srcCompat="@drawable/next" />
</LinearLayout>

<SeekBar
android:id="@+id/seekBar"
android:layout_width="335dp"
android:layout_height="28dp"
app:layout_constraintBottom_toTopOf="@+id/linearLayout"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/imageView3"
app:layout_constraintVertical_bias="0.266" />
<TextView
android:id="@+id/textView2"
android:layout_width="130dp"
android:layout_height="19dp"
android:text="By Ayush Raj "
android:textAlignment="center"
android:textSize="16sp"
android:textStyle="italic"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.537"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/linearLayout"
app:layout_constraintVertical_bias="0.777" />
</androidx.constraintlayout.widget.ConstraintLayout>

Activity . xml for List –


<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">

<ListView
android:id="@+id/listView"
android:layout_width="418dp"
android:layout_height="726dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.45" />

</androidx.constraintlayout.widget.ConstraintLayout>
Image for Demonstartion –
The next feature of the app
As u click next the songs changes

A Video demonstartion for the App –

https://youtu.be/57n-xUzTN-M

You might also like