如何播放声音超过背景音乐

时间:2016-05-05 07:59:13

标签: android android-mediaplayer android-music-player

我有一个具有单一活动的应用程序,我知道如何使用媒体播放器播放背景音乐。由于我只有一项活动所以我认为我真的不需要在服务中播放这种音乐。所以我很少有困惑所以这就是我想要的。

  

我想要的是什么:

在我的应用中,我只有一个活动和一些按钮。我想在按钮点击时播放不同长度的声音。但是,虽然我真的不想停止背景音乐,但它应该同时在后台播放。

  

所以我的问题是(根据我的上限要求)

  1. 是否可以播放两种声音,使它们真的不会打扰其他声音?

  2. 这样做的适当方法是什么?

  3. 我不想在服务中播放背景音乐,因为我会给静音按钮静音背景音乐。因此用UI按钮处理服务会很困难吗?那么两种方式都是什么

  4. 如果您有任何代码和想法,请与我分享。任何链接将不胜感激。提前致谢。

1 个答案:

答案 0 :(得分:2)

您可以将ServiceMediaPlayer

一起使用

服务类 -

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.media.MediaPlayer.OnErrorListener;
import android.os.Binder;
import android.os.IBinder;
import android.widget.Toast;

public class MusicService extends Service  implements MediaPlayer.OnErrorListener{

    private final IBinder mBinder = new ServiceBinder();
    MediaPlayer mPlayer;
    private int length = 0;

    public MusicService() { }

    public class ServiceBinder extends Binder {
         MusicService getService()
         {
            return MusicService.this;
         }
    }

    @Override
    public IBinder onBind(Intent arg0){return mBinder;}

    @Override
    public void onCreate (){
      super.onCreate();

       Player = MediaPlayer.create(this, R.raw.jingle);
       mPlayer.setOnErrorListener(this);

       if(mPlayer!= null)
        {
            mPlayer.setLooping(true);
            mPlayer.setVolume(100,100);
        }


        mPlayer.setOnErrorListener(new OnErrorListener() {

      public boolean onError(MediaPlayer mp, int what, int
          extra){

            onError(mPlayer, what, extra);
            return true;
        }
          });
    }

    @Override
    public int onStartCommand (Intent intent, int flags, int startId)
    {
         mPlayer.start();
         return START_STICKY;
    }

    public void pauseMusic()
    {
        if(mPlayer.isPlaying())
        {
            mPlayer.pause();
            length=mPlayer.getCurrentPosition();

        }
    }

    public void resumeMusic()
    {
        if(mPlayer.isPlaying()==false)
        {
            mPlayer.seekTo(length);
            mPlayer.start();
        }
    }

    public void stopMusic()
    {
        mPlayer.stop();
        mPlayer.release();
        mPlayer = null;
    }

    @Override
    public void onDestroy ()
    {
        super.onDestroy();
        if(mPlayer != null)
        {
        try{
         mPlayer.stop();
         mPlayer.release();
            }finally {
                mPlayer = null;
            }
        }
    }

    public boolean onError(MediaPlayer mp, int what, int extra) {

        Toast.makeText(this, "music player failed", Toast.LENGTH_SHORT).show();
        if(mPlayer != null)
        {
            try{
                mPlayer.stop();
                mPlayer.release();
            }finally {
                mPlayer = null;
            }
        }
        return false;
    }
}

Activity班级中使用ServiceConnection

private boolean mIsBound = false;
private MusicService mServ;
private ServiceConnection Scon =new ServiceConnection(){

    public void onServiceConnected(ComponentName name, IBinder
     binder) {
    mServ = ((MusicService.ServiceBinderbinder).getService();
    }

    public void onServiceDisconnected(ComponentName name) {
        mServ = null;
    }
    };

    void doBindService(){
        bindService(new Intent(this,MusicService.class),
                Scon,Context.BIND_AUTO_CREATE);
        mIsBound = true;
    }

    void doUnbindService()
    {
        if(mIsBound)
        {
            unbindService(Scon);
            mIsBound = false;
        }
    }
}

开始,暂停,恢复和停止音乐

按照步骤

  1. 首先通过调用活动doBindService上的onCreate将服务绑定到活动,然后将意图传递给服务。
  2. 通过明确的Intent启动服务: Intent music = new Intent(); music.setClass(this,MusicService.class); startService(music);
  3. 根据您的活动,无论您想要暂停,恢复或停止音乐,请按以下方式调用相应的服务功能: mServ.pauseMusic(); mServ.resumeMusic(); mServ.stopMusic();
  4. 不要忘记从您要从活动中取消绑定服务的地方拨打doUnbindService。理想的地方是调用活动的onDestroy()方法。
  5. 在您的应用程序的AndroidManifest文件中,粘贴以下XML代码:
  6. "service android:name="MusicService" android:enabled="true"

    我希望这会帮助你。

相关问题