我可以为所有活动创建一个功能,播放,暂停音乐

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() 不需要。

【讨论】:

以上是关于我可以为所有活动创建一个功能,播放,暂停音乐的主要内容,如果未能解决你的问题,请参考以下文章

Android - 播放将在所有活动中播放的背景音乐

怎样用MFC做一个音乐播放器,可以实现播放,暂停,上一首,下一首和显示播放列表的基本功能。谢谢!

Android - 如何在应用程序内保持音乐播放?

Libgdx 播放/暂停音乐

IOS - 暂停和取消暂停当前播放的音乐

如何在 Inno Setup 中制作停止和暂停/恢复/播放音乐按钮