代码之家  ›  专栏  ›  技术社区  ›  Pedro

如何在播放新歌之前停止媒体播放器?

  •  0
  • Pedro  · 技术社区  · 5 年前

    我正在开发一个包含两个活动的应用程序,一个是媒体播放器,另一个是要播放的歌曲列表,mp3播放器工作正常,从带有列表的活动中我传递歌曲的名称,播放器工作正常。我有两个问题,如果用户播放一首歌并离开应用程序(这首歌一直在后台播放,这是如何工作的),那么用户返回应用程序,seekbar栏设置为0,计时器设置为0,是否有方法“保存”活动“……也就是说,如果一首歌正在播放,而用户试图播放另一首歌,在前一首歌曲的基础上播放的歌曲,我试图通过在我的意图中添加一个“键”来确定是否是新的音频,然后执行类似的操作:但不起作用。

    if (playerL != null) {
    
                if (mediaPlayer.isPlaying()) {
                   mediaPlayer.stop;
                }
            }
    
    public class AudioPlayer extends Activity {  
    
        /////////////////////////////////////////////////////////////
        @Override
        protected void onCreate(@Nullable Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.audio_player_activity);
    
            // Header
            Bundle extra = getIntent().getExtras();
            if (extra != null) {
                Intent intent = getIntent();
                id_d    = intent.getStringExtra("Id");
                heading = intent.getStringExtra("Heading"); 
                fileN   = intent.getStringExtra("fileName");
                audioN  = intent.getStringExtra("audioName");
                playerL = intent.getStringExtra("newAudio");
    
                meet_instructor_round_image = findViewById(R.id.audio_player_img);
                playerHeading = findViewById(R.id.audio_player_heading);
                playerHeading.setText(heading);
                Picasso.with(this).load(imgUrl).transform(new CropCircleTransformation()).into(round_image);
                createNotificationChannel();
                activateNotification(id_d, heading, imgUrl, bio);
            } else {
                Intent intent = new Intent(getApplicationContext(), com.starvizn.newstarvizn.COMMON.Activities.MainActivity.class);
                startActivity(intent);
            }
    
            pause = findViewById(R.id.btnAudioSubpause);
            play  = findViewById(R.id.btnAudioSubPlay);  
    
            songName = findViewById(R.id.workoutName);
            initialTime = findViewById(R.id.initialTime); 
    
            songName.setText(audioN);
    
            Uri uri = Uri.parse(getApplicationContext().getFilesDir()+"/Downloads/"+fileN+".mp3"); 
    
            mediaPlayer = MediaPlayer.create(this, uri);
            seekBar = findViewById(R.id.seekBar);
            seekBar.setClickable(false);
            pause.setVisibility(View.INVISIBLE);
    
            // Open lesson view
            lessons_layout = findViewById(R.id.player_lessons);
            lessons_layout.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    Log.e(TAG, "Aqui");
                    Intent intent = new Intent(getApplicationContext(), com.myApp.MainActivity.class); 
                    intent.putExtra("Id", id_d); 
                    startActivity(intent);
                }
            });
    
            if (playerL != null) {
    
                if (mediaPlayer.isPlaying()) {
    
                }
            }
        }
    
        public void player_play(View view) {
            play.setVisibility(View.INVISIBLE);
            pause.setVisibility(View.VISIBLE);
            mediaPlayer.start();
            finalTime = mediaPlayer.getDuration();
            startTime = mediaPlayer.getCurrentPosition();
    
            if (oneTimeOnly == 0) {
                seekBar.setMax((int) finalTime);
                oneTimeOnly = 1;
            } 
    
            initialTime.setText(String.format("%02d:%02d",
                    TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                    TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                            TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.toMinutes((long) startTime)))
            );
    
            seekBar.setProgress((int) startTime);
            myHandler.postDelayed(UpdateSongTime, 100);
            seekBar.setClickable(false);
            pause.setVisibility(View.VISIBLE);
        }
    
        public void player_pause(View view) {
            pause.setVisibility(View.INVISIBLE);
            play.setVisibility(View.VISIBLE);
            int temp = (int) startTime;
    
            mediaPlayer.pause();
        }
    
        public void player_fwd(View view) {
            int temp = (int) startTime;
    
            if ((temp + fwdTime) <= finalTime) {
                startTime = startTime + fwdTime;
                mediaPlayer.seekTo((int) startTime);
            } else {
                Toast.makeText(getApplicationContext(), "Cannot jump forward 5 seconds!", Toast.LENGTH_LONG).show();
            }
        }
    
        public void player_back(View view) {
            int temp = (int) startTime;
    
            if ((temp - backTime) > 0) {
                startTime = startTime - backTime;
                mediaPlayer.seekTo((int) startTime);
            } else {
                Toast.makeText(getApplicationContext(), "Cannot jump backward 5 seconds", Toast.LENGTH_LONG).show();
            }
        }
    
        private Runnable UpdateSongTime = new Runnable() {
            public void run() {
                startTime = mediaPlayer.getCurrentPosition();
                initialTime.setText(String.format("%02d:%02d",
                        TimeUnit.MILLISECONDS.toMinutes((long) startTime),
                        TimeUnit.MILLISECONDS.toSeconds((long) startTime) -
                                TimeUnit.MINUTES.toSeconds(TimeUnit.MILLISECONDS.
                                        toMinutes((long) startTime)))
                );
                seekBar.setProgress((int) startTime);
                myHandler.postDelayed(this, 100);
            }
        };
    
        @Override
        public void onBackPressed() {
    
            builder = new android.app.AlertDialog.Builder(this);
            builder.setTitle("End Player").setMessage("Exit").setPositiveButton("Yes", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                    mediaPlayer.stop();
                    mediaPlayer.release();
                    mediaPlayer = null;
                    NotificationManager notificationManager = (NotificationManager) getApplicationContext().getSystemService(NOTIFICATION_SERVICE);
                    notificationManager.cancelAll();
                    Intent intent = new Intent(getApplicationContext(), com.myapp.MainActivity.class); 
                    intent.putExtra("Id", id_d); 
                    intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
                    startActivity(intent);
                }
            }).setNegativeButton("No", new DialogInterface.OnClickListener() {
                @Override
                public void onClick(DialogInterface dialog, int which) {
                }
            });
            builder.show();
        } 
    
    
    }
    
    0 回复  |  直到 5 年前
        1
  •  0
  •   Bo Z    5 年前

    所以我想你只需要添加处理这个过程的逻辑。正如文档所说,您有两种方法 getCurrentPosition() seekTo(long, int) 因此,我认为您应该保存当前位置,例如在prefs中,并在seekTo方法的帮助下使用之前保存的数据继续。所以有了它你就可以管理国家

    当我在玩播放器应用程序时,我使用ExoPo弹器,它更灵活,更容易使用。你可以试试下面的链接 https://codelabs.developers.google.com/codelabs/exoplayer-intro/#0