我可以为所有 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?
我可以看到两个选项:
- 创建
MediaPlayer
静态对象。
- 考虑实施单一 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()
则不需要它。
第一个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?
我可以看到两个选项:
- 创建
MediaPlayer
静态对象。 - 考虑实施单一 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()
则不需要它。