我可以为所有活动创建一个功能,播放,暂停音乐
Posted
技术标签:
【中文标题】我可以为所有活动创建一个功能,播放,暂停音乐【英文标题】:Can I make one function for all activity, to play, pause music 【发布时间】:2021-09-27 00:49:57 【问题描述】:第一个活动
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
以上是我的第一个活动。我在按钮单击时播放音乐的同时单击按钮也会打开第二个活动。
第二个活动
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)
现在当按下显示消息按钮时,我想停止在第一个活动中播放的音乐。或者我可以用任何其他方式来做吗,比如为 Musicplayer 创建一个具有启动和停止方法的通用函数,并且我可以在任何活动中开始或停止音乐时调用它们?
【问题讨论】:
【参考方案1】:我可以看到两个选项:
-
制作
MediaPlayer
静态对象。
考虑实施单一活动方法。您将拥有两个片段并共享ViewModel
,您可以在其中访问MediaPlayer
。
【讨论】:
先生,我是初学者,这是我的第一个项目。我已经开始通过项目学习android开发。那你能把代码提供给我吗?【参考方案2】:创建一个 Utils 类,您将在其中创建用于播放和暂停音乐播放器的 Global 方法。
在那个 Utils 类中:
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 类中创建这些方法)
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()
不需要。
【讨论】:
以上是关于我可以为所有活动创建一个功能,播放,暂停音乐的主要内容,如果未能解决你的问题,请参考以下文章