Я пытаюсь создать музыкальное приложение в студии Android. Мое приложение прекрасно работает, но у него небольшая ошибка. В моей основной деятельности у меня есть список песен, которые я импортировал из своей сырой папки в папке ресурсов. Мое второе окно - это Java-файл NowPlaying, где я могу приостановить, переслать и увидеть тексты песен.Ошибка в приложении для музыки (Media Player) в студии Android
Когда я воспроизвожу первую песню из Основной деятельности, она работает нормально. Но, когда я хочу сыграть вторую песню, когда играет первая песня, вторая песня играет поверх первой песни. Лирика обновляется, поисковая панель обновляется, но две песни играют вместе. Однако этого не происходит, когда я приостанавливаю первую песню, вернусь к основной деятельности и воспроизведу вторую песню. я использовал:
if(song != null){
if(song.isPlaying()){
song.reset(); song = null;
}
}
Я знаю, что есть ошибка в моем файле NowPlaying.java: так вот весь код:
PS. Я просто участвую в процессе обучения.
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();
}
}
});
}
Код для Основной деятельности:
общественного класс MainActivity расширяет AppCompatActivity {
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);
}
});
}
}
пожалуйста, напишите код для MainActivity.java –
Можете ли вы поместить Log.d в onCreate(), чтобы узнать, сколько раз он звонит редактор – surlac