当前位置: 首页 > 知识库问答 >
问题:

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

申屠森
2023-03-14

我正在开发一个包含两个活动的应用程序,一个是媒体播放器,另一个是要播放的歌曲列表,mp3播放器工作正常,从活动列表中我传递歌曲的名称和播放器工作正常。我有两个问题,如果用户播放一首歌并离开应用程序(这首歌一直在后台播放,这就是假设的工作方式),然后用户返回应用程序,搜索栏设置为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();
    } 


}

共有1个答案

上官波鸿
2023-03-14

所以我想你只需要添加逻辑来处理这个过程。正如文档中所述,您有两种方法:seekTo(long,int)和seekTo(code),例如在prefs中保存当前位置,然后在seekTo方法的帮助下使用之前保存的数据恢复当前位置。因此,借助于此,您可以管理状态

当我在开发播放器应用程序时,我使用了ExoPlayer,它更灵活、更易于使用。您可以尝试下面的链接https://codelabs.developers.google.com/codelabs/exoplayer-intro/#0

 类似资料:
  • 我已经创建了一个使用媒体播放器播放音频的应用程序,但即使其他应用程序(如youtube)开始播放视频,我的播放器也不会停止。 如何停止音频,如果其他应用程序开始播放音频。 我用过mediaPlayer。start();播放音频。 任何帮助都将不胜感激。

  • 我试图通过使用寻求酒吧听众播放一首歌。但是当我尝试拖动进度条时,它会从歌曲的开头播放。它需要从那个被拖动的位置演奏。 这是我的代码: 如何解决这个问题。提前谢谢。。

  • 我已经创建了一个android应用程序,使用媒体播放器播放文本到语音文件,但是如果其他音频/视频开始播放,那么我的音频也会播放,即同时播放两个音频。 有没有办法在开始另一个音频/视频之前停止第一个音频。 是否有任何广播接收器会在其他音频开始时被调用。 我用过- layer.play播放音频。 和暂停音频。 任何帮助都将不胜感激。

  • 如果我的应用程序音频开始播放,我必须停止外部媒体播放器。就youtube而言,它会自动停止,但谷歌的媒体播放器不会停止。 我使用了以下代码。 但它也停止了我的其他音频。任何帮助都将不胜感激。

  • 问题内容: 我的键盘包含用于执行各种非标准键盘任务的一行按钮。这些键包含诸如修改音量,播放或暂停以及跳过曲目等功能。如何使用Python模拟基本播放/暂停?顺便说一下,我在Windows上。 问题答案: 我会用pywin32。与安装捆绑在一起的是大量的API文档(通常放在。),它实际上包装了Win32库中的许多内容,该库用于Windows中的许多低级任务。 安装后,您可以使用keybd_event

  • 我正在开发一个包含一些音频播放器的RecyclerView的应用程序。应用程序将下载。3gp文件(如果尚未下载)。 当我单击playAudio按钮时,音频未被播放。 这是我的适配器代码: 我怎样才能解决这个问题?