我可以为所有 activity 制作一个功能来播放、暂停音乐吗

Can I make one function for all activity, to play, pause music

第一个Activity

package com.example.birthdaywish;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Context;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.text.Editable;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    
    public void wishButton(View view) {
        final EditText editText = findViewById(R.id.editTextTextPersonName);
        String name = editText.getText().toString();

        Intent intent =  new Intent(this, screen2.class);
        intent.putExtra("name", name);



        startActivity(intent);

        MediaPlayer mediaPlayer = MediaPlayer.create(this, R.raw.happy_birthday_song);
        mediaPlayer.start(); // no need to call prepare(); create() does that for you




    }

}

以上是我的第一个activity。其中我在点击按钮的同时播放了音乐点击按钮也会打开第二个 activity.

第二个Activity

package com.example.birthdaywish;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.SuppressLint;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;

import org.w3c.dom.Text;

public class screen2 extends AppCompatActivity {


    @SuppressLint("SetTextI18n")
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_screen2);
        TextView enteredName = findViewById(R.id.textView2);
        String name = getIntent().getStringExtra("name");
        enteredName.setText("Happy Birthday " +name);


    }



    public void displayMessage(View view) {
      
        

    }
}

现在当按下显示消息按钮时,我想停止第一个播放的音乐activity。或者我可以用任何其他方式来做到这一点,比如为具有开始和停止方法的 Musicplayer 创建一个通用函数,我可以在任何时候想要开始或停止音乐时调用它们 activity?

我可以看到两个选项:

  1. 创建 MediaPlayer 静态对象。
  2. 考虑实施单一 Activity 方法。您将有两个片段和共享 ViewModel,您可以在其中访问 MediaPlayer.

创建一个 Utils class,您将在其中创建用于播放和暂停音乐播放器的全局方法。

在那个 Utils class:

private static MediaPlayer mediaPlayer;
private static int seek_position;

public static void playMedia(Context context, int music) {
    if (mediaPlayer.isPlaying() && mediaPlayer != null) {
        mediaPlayer.stop();
        mediaPlayer.release();
    }
    mediaPlayer = MediaPlayer.create(context, music);
    try {
        mediaPlayer.prepare();
    } catch (IOException e) {
        e.printStackTrace();
    }
    mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(MediaPlayer mp) {
            mediaPlayer.start();
        }
    });
}

只要您想像这样播放媒体,就可以使用此方法:

Utils.playMedia(this, R.raw.happy_birthday_song);

现在,如果您想实现全局暂停、恢复和停止功能,请使用这个(在相同的 Utils 中创建这些方法 class)

public static void pauseMedia(Context context) {
    if (mediaPlayer.isPlaying() && mediaPlayer != null) {
        seek_position = mediaPlayer.getCurrentPosition();
        mediaPlayer.pause();
    }
}

public static void resumeMedia(Context context) {
    if (!mediaPlayer.isPlaying() && mediaPlayer != null) {
        mediaPlayer.seekTo(seek_position);
        mediaPlayer.start();
    }
}

public static void stopMedia(Context context) {
    if (mediaPlayer.isPlaying() && mediaPlayer != null) {
        mediaPlayer.stop();
    }
}

只要像第一种方法一样调用这些方法,就可以在您的应用程序中的任何位置使用它们。

注意:pause()stop() 的区别在于,如果您使用 stop(),您必须重新准备媒体播放器,而 pause() 则不需要它。