2

我像这样启动媒体播放器:

    if (mp != null) {
        mp.stop();
        mp.reset();
        mp.release();
    }
    mp = MediaPlayer.create(this, R.raw.background);
    mp.start();

我怎样才能停止另一个活动?它继续在另一个活动中播放。如何onDestroy在其他活动中使用?

4

5 回答 5

8

在您的项目中使用如下所示的分离类。

import android.content.Context;
import android.media.AudioManager;
import android.media.MediaPlayer;
import android.media.SoundPool;

public class AudioPlay {

    public static MediaPlayer mediaPlayer;
        private static SoundPool soundPool;
    public static boolean isplayingAudio=false;
    public static void playAudio(Context c,int id){
         mediaPlayer = MediaPlayer.create(c,id);
         soundPool = new SoundPool(4, AudioManager.STREAM_MUSIC, 100);
         if(!mediaPlayer.isPlaying())           
         {
        isplayingAudio=true;
         mediaPlayer.start();             
         }          
     }
    public static void stopAudio(){     
         isplayingAudio=false;       
         mediaPlayer.stop();
    }   
}

播放歌曲

`AudioPlay.playAudio(mContext, R.raw.audiofile);` // play it from your preferred activity. and you can change raw file to your path also its depends upon your requirement. 

AudioPlay.stopAudio();然后在任何活动中使用此行停止音频。希望这可以帮助。

于 2013-05-22T11:15:59.517 回答
1

在第一个活动中覆盖 onPause

@Override
protected void onPause() {
    // TODO Auto-generated method stub
    super.onPause();
            mp.stop();
}
于 2013-05-22T11:04:19.380 回答
1

这是我的Kotlin解决方案:

package com.programacionymas.myapp.services

import android.content.Context
import android.media.MediaPlayer

object AudioPlay {
    var mediaPlayer: MediaPlayer? = null
    var lastResource: Int? = null

    fun playAudio(c: Context, id: Int, isLooping: Boolean = true) {
        createMediaPlayer(c, id)

        mediaPlayer?.let {
            it.isLooping = isLooping

            if (!it.isPlaying) {
                it.start()
            }
        }
    }

    private fun createMediaPlayer(c: Context, id: Int) {
        // in case it's already playing something
        mediaPlayer?.stop()

        mediaPlayer = MediaPlayer.create(c, id)
        lastResource = id
    }

    // usually used inside the Activity's onResume method
    fun continuePlaying(c: Context, specificResource: Int? = null) {
        specificResource?.let {
            if (lastResource != specificResource) {
                createMediaPlayer(c, specificResource)
            }
        }

        mediaPlayer?.let {
             if (!it.isPlaying) {
                it.start()
            }
        }
    }

    fun pauseAudio() {
        mediaPlayer?.pause()
    }

}

我从itsrajesh4uguys的 Java 答案开始,并应用了这些更改:

  • 删除布尔属性,因为它没有被使用
  • 添加一个属性来跟踪最后加载的资源,这样我可以继续播放它或替换为其他资源
  • 在创建新实例之前调用停止函数,以避免重叠

最后我以这种方式使用它:

onCreate方法中:

AudioPlay.playAudio(this, R.raw.background_music)

onResume方法中:

AudioPlay.continuePlaying(this, R.raw.background_music)

就我而言,我必须指定资源,因为我的一些活动开始播放另一种音乐声音。

于 2020-07-02T23:14:50.410 回答
0

您不能调用停止活动,而是从活动本身调用

实现这一点,您可以在服务中发送媒体播放器,并在要访问它的活动中绑定到服务

于 2013-05-22T11:06:24.643 回答
0

当您在第一个活动中启动媒体播放器并希望在另一个活动中停止时,只需使用布局充气器 self 在第一个活动中调用您的第二个布局,而不是创建另一个活动.. 在第二个布局文件上,只需按下按钮即可停止媒体播放器

   public class FirstAvtivity extends Activity
   {  
    MediaPlayer mPlayer;
   protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
     setContentView(R.layout.first_activity_layoutfile);
     Button b=(Button)findViewById(R.id.button1);

    //start the media player like how you were starting in your activity
// then after clicking button you will be navigated to new layout , there  
//  you can stop media player

       mPlayer.start();
      b.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            updateLayout();


        }
    });

   }
    private void newUpdateLayout() {
    LayoutInflater inflater = LayoutInflater.from(this);
     setContentView(inflater.inflate(R.layout.second_disapr_scr, null));
    finalDismiss=(Button)findViewById(R.id.final_dismiss);
     finalDismiss.setOnClickListener(new View.OnClickListener() {
         @Override
         public void onClick(View view) {
             Toast.makeText(getApplicationContext(),"welcome to second 
 avtivity",Toast.LENGTH_SHORT).show();
             mPlayer.stop();
             finish();
         }
     });
   }
 }
于 2015-07-14T09:50:30.153 回答