Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/178.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 在媒体播放器中同时播放歌曲。安卓工作室_Android_Media Player - Fatal编程技术网

Android 在媒体播放器中同时播放歌曲。安卓工作室

Android 在媒体播放器中同时播放歌曲。安卓工作室,android,media-player,Android,Media Player,我在android studio中创建了一个音乐应用程序。我得到的问题是,当我想在第一首歌曲中间播放第二首歌曲时,它会在第一首歌曲的顶部播放。第一首歌并没有停止播放。它将继续播放第二首选定的歌曲 在应用程序中,我有两个MainActivity的活动。java有歌曲列表,NowPlaying.java播放歌曲 下面给出了两个java类的代码: MainActivity.java public class MainActivity extends AppCompatActivity { Strin

我在android studio中创建了一个音乐应用程序。我得到的问题是,当我想在第一首歌曲中间播放第二首歌曲时,它会在第一首歌曲的顶部播放。第一首歌并没有停止播放。它将继续播放第二首选定的歌曲

在应用程序中,我有两个MainActivity的活动。java有歌曲列表,NowPlaying.java播放歌曲

下面给出了两个java类的代码:

MainActivity.java

public class MainActivity extends 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);

            String selectedSong = (String) (theList.getItemAtPosition(position));
            Intent toSecondActivity = new Intent(MainActivity.this, NowPlaying.class);
            toSecondActivity.putExtra("playSong", selectedSong);
            startActivity(toSecondActivity);
        }
    });


}
....
....
 String selectedSong = (String) (theList.getItemAtPosition(position));
 // instead of intents use the advantage of singleton class.
 NowPlaying.getInstance(selectedSong);
....
....
public类MainActivity扩展了AppCompatActivity{
字符串[]歌曲列表;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
大众主义者();
}
私有void populateList(){
歌曲列表=新字符串[]{“Jalma”、“Demons”、“Parelima”、“Mero Balyakal Ko Sathi”、“Audai Jadai”,
“案例420”、“尤塔·萨提”、“啦啦队长”};
ListAdapter arrayAdapter=新的arrayAdapter(这是android.R.layout.simple\u list\u item\u 1,
歌曲列表);
ListView theList=(ListView)findViewById(R.id.theList);
列表设置适配器(arrayAdapter);
setOnItemClickListener(新的AdapterView.OnItemClickListener(){
@凌驾
public void onItemClick(AdapterView父对象、视图、整型位置、长id){
ListView theList=(ListView)findViewById(R.id.theList);
字符串selectedSong=(字符串)(list.getItemAtPosition(位置));
Intent-toSecondActivity=newintent(MainActivity.this,NowPlaying.class);
toSecondActivity.putExtra(“播放歌曲”,选择歌曲);
星触觉(至秒触觉);
}
});
}
}

NowPlaying.java

public class NowPlaying extends AppCompatActivity {

MediaPlayer song;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_now_playing2);

    song = MediaPlayer.create(this, R.raw.demons);
    song.start();
    song.pause();

    selectSong();
    pauseButton();
    getSongList();
    getNextButton();
    getPreviousButton();

}

/**
 * Method for selecting the song
 * Moves to startSong method
 */
public void selectSong(){

    checkIfSongIsPlaying();
        String nextPlay = getIntent().getStringExtra("playSong");
    TextView lyricsBox = (TextView) findViewById(R.id.lyricsBox);
    lyricsBox.setMovementMethod(new ScrollingMovementMethod());

        if (nextPlay.equals("Demons")) {
            song = MediaPlayer.create(this, R.raw.demons);
            lyricsBox.setText(R.string.demonsLyrics);
        }
        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("Case 420")) {
            song = MediaPlayer.create(this, R.raw.case420);
            lyricsBox.setText(R.string.case420Lyrics);
        } 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);
            lyricsBox.setText(R.string.eutaSathi);

        } else if (nextPlay.equals("Audai Jadai")) {
            song = MediaPlayer.create(this, R.raw.audaijadai);
            lyricsBox.setText(R.string.audaijadaiLyrics);

        } else if (nextPlay.equals("Cheerleader")) {
            song = MediaPlayer.create(this, R.raw.cheerleader);
            lyricsBox.setText(R.string.cheerleaderLyrics);
        }
        playSong();

}

public void checkIfSongIsPlaying(){

    if(song !=null){
        song.pause();

    }
}

/**
 * Method to start song (play the song)
 *
 */
public void playSong(){
    song.start();
    getSongtitle();
    getSeekbar();
    onSongCompletion();

}

/**
 * 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(){

    String nextPlay = getIntent().getStringExtra("playSong");
    TextView songTitle = (TextView) findViewById(R.id.songTitle);
    songTitle.setText(nextPlay);


}//end of getSongtitle method


/**
 * 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));
        }
    });
}



Runnable run = new Runnable() {
    @Override
    public void run() {
        getSeekbar();
    }
};


/**
 * Method to update the seekbar.
 * implement touch in seekbar to change song position
 */
        public void getSeekbar(){
            SeekBar seekBar = (SeekBar) findViewById(R.id.seekBar);
           seekBar.setMax(song.getDuration());
            seekBar.setProgress(song.getCurrentPosition());
            seekBar.postDelayed(run, 1000);
            TextView endTimer = (TextView) findViewById(R.id.endTimer);
            TextView startTimer = (TextView) findViewById(R.id.startTimer);

            double  finalTime = song.getDuration();
            double startTime = song.getCurrentPosition();
            double timeRemaining = finalTime - song.getCurrentPosition();
            startTimer.setText(String.format("%d:%d", TimeUnit.MILLISECONDS.toMinutes((long)startTime ), TimeUnit.MILLISECONDS.toSeconds((long) startTime) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime))));
            endTimer.setText(String.format("%d:%d", TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining), TimeUnit.MILLISECONDS.toSeconds((long) timeRemaining) - TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) timeRemaining))));

            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);
                }
            });
        }


/**
 * Lists the song list after song is completeted
 */
public void onSongCompletion(){

    song.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer song) {
            song.reset();
            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();

            }
        }
    });
} //end of getPreviousButton method
public类NowPlaying扩展了appcompative活动{
媒体播放器歌曲;
@凌驾
创建时受保护的void(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity\u now\u playing2);
宋=MediaPlayer.create(这个,R.raw.demons);
song.start();
歌曲。暂停();
选择歌曲();
pauseButton();
getSongList();
getNextButton();
getPreviousButton();
}
/**
*选择歌曲的方法
*移动到startSong方法
*/
公共歌曲(){
CheckIfSongisplay();
字符串nextPlay=getIntent().getStringExtra(“播放歌曲”);
TextView-lyricsBox=(TextView)findViewById(R.id.lyricsBox);
setMovementMethod(新的ScrollingMovementMethod());
如果(nextPlay.equals(“恶魔”)){
宋=MediaPlayer.create(这个,R.raw.demons);
lyricsBox.setText(R.string.desmophries);
}
否则如果(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(“案例420”)){
song=MediaPlayer.create(这个,R.raw.case420);
lyricsBox.setText(R.string.Case420Lyps);
}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);
lyricsBox.setText(R.string.eutaSathi);
}else if(nextPlay.equals(“Audai Jadai”)){
song=MediaPlayer.create(这个,R.raw.audaijadai);
lyricsBox.setText(R.string.audaijadailypriss);
}else if(nextPlay.equals(“啦啦队长”)){
song=MediaPlayer.create(这个,R.raw.Cheerreader);
lyricsBox.setText(R.string.CheerreaderRyrics);
}
播放歌曲();
}
公共void checkIfSongIsPlaying(){
如果(歌曲!=null){
歌曲。暂停();
}
}
/**
*开始歌曲的方法(播放歌曲)
*
*/
公开播放歌曲(){
song.start();
getSongtitle();
getSeekbar();
onSongCompletion();
}
/**
*暂停按钮的方法
*单击后暂停歌曲并更改按钮背景以播放图像
*如果再次按下按钮,请再次播放歌曲。然后将背景更改回暂停图像
*/
公共无效暂停按钮(){
最终按钮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(){
字符串nextPlay=getIntent().getStringExtra(“播放歌曲”);
TextView songTitle=(TextView)findViewById(R.id.songTitle);
songTitle.setText(下一个播放);
}//getSongtitle方法的结尾
/**
*歌曲列表按钮的方法
*点击按钮后返回到第一个java文件,
*显示歌曲列表
*/
public void getSongList(){
按钮lyricsButton=(按钮)findViewById(R.id.lyricsButton);
lyricsButton.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
startActivity(新意图(NowPlaying.this,MainActivity.class));
}
});
}
Runnable run=new Runnable(){
@凌驾
公开募捐{
getSeekbar();
}
};
/**
*方法更新seekbar。
*在seekbar中执行触摸以更改乐曲位置
*/
public void getSeekbar(){
SeekBar SeekBar=(SeekBar)findViewById(R.id.SeekBar);
seekBar.setMax(song.getDuration());
seekBar.setProgress(song.ge
public class public class NowPlaying extends AppCompatActivity {
    NowPlaying nowplaying; 
    String selectedSong;
    MediaPlayer song;
    public static NowPlaying getInstance(String selectedSong){
        if(nowplaying == null){
             nowplaying = new NowPlaying();
        }
        this.selectedSong = selectedSong;
        return nowplaying;
    }
        // these two methods are calling one after the other which won't allow the song to play completely.
        song.start();
        song.pause(); // keep this method in different method such as pause btn click listener.
        .....
        ... rest of code ...
        .....

   }