Android studio中的音乐应用程序(媒体播放器)出错
我正在尝试在android studio中制作一个音乐应用程序。我的应用程序运行良好,只是有一个小错误。在我的主要活动中,我有一个从资源文件夹中的原始文件夹导入的歌曲列表。我的第二个窗口是一个正在播放的java文件,在这里我可以暂停、转发并查看歌曲的歌词 当我播放主活动的第一首歌时,效果很好。但是,当我想在播放第一首歌的同时播放第二首歌时,第二首歌会在第一首歌的基础上播放。歌词得到更新,搜索栏得到更新,但这两首歌一起播放。但是,当我暂停第一首歌,返回主要活动并播放第二首歌时,不会发生这种情况。 我用过: 我知道我的NowPlaying.java文件中有一个错误:下面是完整的代码: 另外,我只是在学习过程中Android studio中的音乐应用程序(媒体播放器)出错,android,android-mediaplayer,audio-player,android-music-player,Android,Android Mediaplayer,Audio Player,Android Music Player,我正在尝试在android studio中制作一个音乐应用程序。我的应用程序运行良好,只是有一个小错误。在我的主要活动中,我有一个从资源文件夹中的原始文件夹导入的歌曲列表。我的第二个窗口是一个正在播放的java文件,在这里我可以暂停、转发并查看歌曲的歌词 当我播放主活动的第一首歌时,效果很好。但是,当我想在播放第一首歌的同时播放第二首歌时,第二首歌会在第一首歌的基础上播放。歌词得到更新,搜索栏得到更新,但这两首歌一起播放。但是,当我暂停第一首歌,返回主要活动并播放第二首歌时,不会发生这种情况。
MediaPlayer song = null;
SeekBar seekBar;
Intent intent = getIntent();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_now_playing);
seekBar = (SeekBar) findViewById(R.id.seekBar);
//String selectedSong = getIntent().getExtras().getString("selectSong");
selectSong();
//for pause button
pauseButton();
//for songtile
getSongtitle();
getSongList();
getNextButton();
getPreviousButton();
} // end of onCreate method
/**
* Method for selecting the song
* Moves to startSong method
*/
public void selectSong(){
TextView lyricsBox = (TextView) findViewById(R.id.lyricsBox);
lyricsBox.setMovementMethod(new ScrollingMovementMethod());
String nextPlay = intent.getStringExtra("playSong");
if(song != null){
if(song.isPlaying()){
song.reset();
song = null;
}
}
if (nextPlay.equals("Demons")) {
song = MediaPlayer.create(this, R.raw.demons);
lyricsBox.setText(R.string.demonsLyrics);
} else if (nextPlay.equals("Black Space")) {
song = MediaPlayer.create(this, R.raw.blankspace);
lyricsBox.setText(R.string.blankspaceLyrics);
} else if (nextPlay.equals("Case 420")) {
song = MediaPlayer.create(this, R.raw.case420);
lyricsBox.setText(R.string.case420Lyrics);
}
else if(nextPlay.equals("Jalma")){
song = MediaPlayer.create(this, R.raw.jalma);
lyricsBox.setText(R.string.jalmaLyrics);
}
else if(nextPlay.equals("Parelima")){
song = MediaPlayer.create(this, R.raw.parelima);
lyricsBox.setText(R.string.parelimaLyrics);
}
else if(nextPlay.equals("Mero Balyakal Ko Sathi")){
song = MediaPlayer.create(this, R.raw.balyakalsathi);
lyricsBox.setText(R.string.balyakalSathi);
}
else if(nextPlay.equals("Euta Sathi")){
song = MediaPlayer.create(this, R.raw.eutasathi);
}
else if(nextPlay.equals("Audai Jadai")){
song = MediaPlayer.create(this, R.raw.audaijadai);
}
else if(nextPlay.equals("Cheerleader")){
song = MediaPlayer.create(this, R.raw.cheerleader);
}
// to start playing the song
startButton();
}
//method to make sure seekbar updates till song ends
Runnable run = new Runnable() {
@Override
public void run() {
getseekBar();
}
};
/**
* Method to start song (play the song)
*
*/
public void startButton() {
song.start();
//to update seek bar
getseekBar();
}
/**
* Method to update the seekbar.
* implement touch in seekbar to change song position
*/
public void getseekBar() {
seekBar.setMax(song.getDuration());
seekBar.setProgress(song.getCurrentPosition());
seekBar.postDelayed(run, 1000);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int seek_to;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
seek_to = progress;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
song.seekTo(seek_to);
}
});
}
/**
* Method for pause Button
* to pause song once clicked and change button background to play image
* Again play the song if the button is pressed again. and change background back to pause image
*/
public void pauseButton(){
final Button playButton = (Button) findViewById(R.id.playButton);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (song.isPlaying()) {
playButton.setBackgroundResource(R.drawable.playbutton);
song.pause();
} else {
playButton.setBackgroundResource(R.drawable.pausebutton);
song.start();
}
}
});
}
/**
* Method to get the song title from first java file and display in the title
*/
public void getSongtitle(){
Intent intent = getIntent();
String nextPlay = intent.getStringExtra("playSong");
TextView Songtitle = (TextView) findViewById(R.id.Songtitle);
Songtitle.setText(nextPlay);
}
/**
* Method for song list button
* Goes back to the first java file once the button is cliked,
* displays the song list
*/
public void getSongList(){
Button lyricsButton = (Button) findViewById(R.id.lyricsButton);
lyricsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(NowPlaying.this, MainActivity.class));
}
});
}
/**
* Method for next button
* the song skips every 10 seconds once clicked
*/
public void getNextButton(){
Button nextButton = (Button) findViewById(R.id.nextButton);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int startTime = song.getCurrentPosition();
int forwardTime = 10000;
startTime += forwardTime;
if(startTime <= song.getDuration()){
song.seekTo(startTime);
}
else{
song.stop();
}
}
});
} // end of getNextButton
/**
* Method for previous button
* the song skips back 10 seconds once clicked
*/
public void getPreviousButton(){
Button previousButton = (Button) findViewById(R.id.previousButton);
previousButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int startTime = song.getCurrentPosition();
int previousTime = 10000;
startTime -= previousTime;
if(startTime >= 0){
song.seekTo(startTime);
}
else{
song.seekTo(0);
song.start();
}
}
});
}
MediaPlayer歌曲=null;
SeekBar-SeekBar;
Intent=getIntent();
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u正在播放);
seekBar=(seekBar)findViewById(R.id.seekBar);
//String selectedSong=getIntent().getExtras().getString(“selectSong”);
选择歌曲();
//用于暂停按钮
pauseButton();
//给松瓦
getSongtitle();
getSongList();
getNextButton();
getPreviousButton();
}//onCreate方法的结束
/**
*选择歌曲的方法
*移动到startSong方法
*/
公共歌曲(){
TextView-lyricsBox=(TextView)findViewById(R.id.lyricsBox);
setMovementMethod(新的ScrollingMovementMethod());
String nextPlay=intent.getStringExtra(“播放歌曲”);
如果(歌曲!=null){
if(song.isPlaying()){
song.reset();
宋=空;
}
}
如果(nextPlay.equals(“恶魔”)){
宋=MediaPlayer.create(这个,R.raw.demons);
lyricsBox.setText(R.string.desmophries);
}else if(nextPlay.equals(“黑色空间”)){
song=MediaPlayer.create(这个,R.raw.blankspace);
lyricsBox.setText(R.string.blankspacelyrs);
}else if(nextPlay.equals(“案例420”)){
song=MediaPlayer.create(这个,R.raw.case420);
lyricsBox.setText(R.string.Case420Lyps);
}
否则如果(nextPlay.equals(“Jalma”)){
song=MediaPlayer.create(这个,R.raw.jalma);
lyricsBox.setText(R.string.jalmaLyrics);
}
else if(nextPlay.equals(“Parelima”)){
song=MediaPlayer.create(this,R.raw.parelima);
lyricsBox.setText(R.string.parelimaLyrics);
}
else if(nextPlay.equals(“Mero Balyakal Ko Sathi”)){
song=MediaPlayer.create(这个,R.raw.balyakalsati);
lyricsBox.setText(R.string.Balyakalsati);
}
else if(nextPlay.equals(“Euta Sathi”)){
song=MediaPlayer.create(这个,R.raw.eutasathi);
}
else if(nextPlay.equals(“Audai Jadai”)){
song=MediaPlayer.create(这个,R.raw.audaijadai);
}
else if(nextPlay.equals(“啦啦队长”)){
song=MediaPlayer.create(这个,R.raw.Cheerreader);
}
//开始演奏这首歌
开始按钮();
}
//方法确保seekbar更新,直到歌曲结束
Runnable run=new Runnable(){
@凌驾
公开募捐{
getseekBar();
}
};
/**
*开始歌曲的方法(播放歌曲)
*
*/
公共无效开始按钮(){
song.start();
//更新搜索栏的步骤
getseekBar();
}
/**
*方法更新seekbar。
*在seekbar中执行触摸以更改乐曲位置
*/
public void getseekBar(){
seekBar.setMax(song.getDuration());
seekBar.setProgress(song.getCurrentPosition());
seekBar.postDelayed(运行,1000);
seekBar.setOnSeekbarchaneListener(新的seekBar.onSeekbarchaneListener(){
int seek_to;
@凌驾
public void onProgressChanged(SeekBar-SeekBar、int-progress、boolean-fromUser){
追求进步;
}
@凌驾
开始跟踪触摸时的公共无效(SeekBar SeekBar){
}
@凌驾
TopTrackingTouch(SeekBar SeekBar)上的公共无效{
song.seekTo(seek_to);
}
});
}
/**
*暂停按钮的方法
*单击后暂停歌曲并更改按钮背景以播放图像
*如果再次按下按钮,请再次播放歌曲。并将背景更改回暂停图像
*/
公共无效暂停按钮(){
最终按钮playButton=(按钮)findViewById(R.id.playButton);
playButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
if(song.isPlaying()){
playButton.setBackgroundResource(R.drawable.playButton);
歌曲。暂停();
}否则{
playButton.setBackgroundResource(R.drawable.pausebutton);
song.start();
}
}
});
}
/**
*方法从第一个java文件中获取歌曲标题并显示在标题中
*/
public void getSongtitle(){
Intent=getIntent();
String nextPlay=intent.getStringExtra(“播放歌曲”);
TextView Songtitle=(TextView)findViewById(R.id.Songtitle);
Songtitle.setText(下一个播放);
}
/**
*歌曲列表按钮的方法
*点击按钮后返回到第一个java文件,
*显示歌曲列表
*/
public void getSongList(){
按钮lyricsButton=(按钮)findViewById(R.id.lyricsButton);
lyricsButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
startActivity(新意图(NowPlaying.this,MainActivity.class));
}
});
}
/**
*下一步按钮的方法
*单击后,歌曲每10秒跳过一次
*/
public void getNextButton(){
按钮nextButton=(按钮)findViewById(R.id.nextButton);
setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
int startTime=song.getCurrentPosition();
MediaPlayer song = null;
SeekBar seekBar;
Intent intent = getIntent();
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_now_playing);
seekBar = (SeekBar) findViewById(R.id.seekBar);
//String selectedSong = getIntent().getExtras().getString("selectSong");
selectSong();
//for pause button
pauseButton();
//for songtile
getSongtitle();
getSongList();
getNextButton();
getPreviousButton();
} // end of onCreate method
/**
* Method for selecting the song
* Moves to startSong method
*/
public void selectSong(){
TextView lyricsBox = (TextView) findViewById(R.id.lyricsBox);
lyricsBox.setMovementMethod(new ScrollingMovementMethod());
String nextPlay = intent.getStringExtra("playSong");
if(song != null){
if(song.isPlaying()){
song.reset();
song = null;
}
}
if (nextPlay.equals("Demons")) {
song = MediaPlayer.create(this, R.raw.demons);
lyricsBox.setText(R.string.demonsLyrics);
} else if (nextPlay.equals("Black Space")) {
song = MediaPlayer.create(this, R.raw.blankspace);
lyricsBox.setText(R.string.blankspaceLyrics);
} else if (nextPlay.equals("Case 420")) {
song = MediaPlayer.create(this, R.raw.case420);
lyricsBox.setText(R.string.case420Lyrics);
}
else if(nextPlay.equals("Jalma")){
song = MediaPlayer.create(this, R.raw.jalma);
lyricsBox.setText(R.string.jalmaLyrics);
}
else if(nextPlay.equals("Parelima")){
song = MediaPlayer.create(this, R.raw.parelima);
lyricsBox.setText(R.string.parelimaLyrics);
}
else if(nextPlay.equals("Mero Balyakal Ko Sathi")){
song = MediaPlayer.create(this, R.raw.balyakalsathi);
lyricsBox.setText(R.string.balyakalSathi);
}
else if(nextPlay.equals("Euta Sathi")){
song = MediaPlayer.create(this, R.raw.eutasathi);
}
else if(nextPlay.equals("Audai Jadai")){
song = MediaPlayer.create(this, R.raw.audaijadai);
}
else if(nextPlay.equals("Cheerleader")){
song = MediaPlayer.create(this, R.raw.cheerleader);
}
// to start playing the song
startButton();
}
//method to make sure seekbar updates till song ends
Runnable run = new Runnable() {
@Override
public void run() {
getseekBar();
}
};
/**
* Method to start song (play the song)
*
*/
public void startButton() {
song.start();
//to update seek bar
getseekBar();
}
/**
* Method to update the seekbar.
* implement touch in seekbar to change song position
*/
public void getseekBar() {
seekBar.setMax(song.getDuration());
seekBar.setProgress(song.getCurrentPosition());
seekBar.postDelayed(run, 1000);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
int seek_to;
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
seek_to = progress;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
song.seekTo(seek_to);
}
});
}
/**
* Method for pause Button
* to pause song once clicked and change button background to play image
* Again play the song if the button is pressed again. and change background back to pause image
*/
public void pauseButton(){
final Button playButton = (Button) findViewById(R.id.playButton);
playButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (song.isPlaying()) {
playButton.setBackgroundResource(R.drawable.playbutton);
song.pause();
} else {
playButton.setBackgroundResource(R.drawable.pausebutton);
song.start();
}
}
});
}
/**
* Method to get the song title from first java file and display in the title
*/
public void getSongtitle(){
Intent intent = getIntent();
String nextPlay = intent.getStringExtra("playSong");
TextView Songtitle = (TextView) findViewById(R.id.Songtitle);
Songtitle.setText(nextPlay);
}
/**
* Method for song list button
* Goes back to the first java file once the button is cliked,
* displays the song list
*/
public void getSongList(){
Button lyricsButton = (Button) findViewById(R.id.lyricsButton);
lyricsButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(NowPlaying.this, MainActivity.class));
}
});
}
/**
* Method for next button
* the song skips every 10 seconds once clicked
*/
public void getNextButton(){
Button nextButton = (Button) findViewById(R.id.nextButton);
nextButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int startTime = song.getCurrentPosition();
int forwardTime = 10000;
startTime += forwardTime;
if(startTime <= song.getDuration()){
song.seekTo(startTime);
}
else{
song.stop();
}
}
});
} // end of getNextButton
/**
* Method for previous button
* the song skips back 10 seconds once clicked
*/
public void getPreviousButton(){
Button previousButton = (Button) findViewById(R.id.previousButton);
previousButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
int startTime = song.getCurrentPosition();
int previousTime = 10000;
startTime -= previousTime;
if(startTime >= 0){
song.seekTo(startTime);
}
else{
song.seekTo(0);
song.start();
}
}
});
}
String[] songList;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
populateList();
}
private void populateList(){
songList = new String[] {"Jalma", "Demons", "Parelima", "Mero Balyakal Ko Sathi", "Audai Jadai",
"Case 420", "Euta Sathi", "Cheerleader"};
ListAdapter arrayAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
songList);
ListView theList = (ListView) findViewById(R.id.theList);
theList.setAdapter(arrayAdapter);
theList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
ListView theList = (ListView) findViewById(R.id.theList);
startActivity(new Intent(MainActivity.this, NowPlaying.class));
String selectedSong = (String) (theList.getItemAtPosition(position));
Intent toSecondActivity = new Intent(getApplicationContext(), NowPlaying.class);
toSecondActivity.putExtra("playSong", selectedSong);
startActivity(toSecondActivity);
}
});
}
theList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
String selectedSong = (String) (theList.getItemAtPosition(position));
Intent toSecondActivity = new Intent(MainActivity.this, NowPlaying.class);
toSecondActivity.putExtra("playSong", selectedSong);
startActivity(toSecondActivity);
}
});
I am also facing the same issue.Songs are playing on top of each other. Finally I found the answer from a video.
https://www.youtube.com/watch?v=4DC4XFWVFls
//For Play Button OnClick Listener
public void onClick(View v) {
if(mediaPlayer !=null)
{
mediaPlayer.release();
}
mediaPlayer = MediaPlayer.create(context, songList.getSong());
mediaPlayer.start();
}
//For Stop Button
public void onClick(View v) {
mediaPlayer.stop();
}
This code worked properly for me.
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_now_playing);
.......
@Override
public void onDestroy(){
if(song.isplaying())
{
song.pause();
song.release();
}
super.onDestroy();
}
}