在所有活动中播放MediaPlayer

时间:2016-11-25 17:00:51

标签: android multithreading

我有一个扩展BaseActivity的Activity,其中在BaseActivity中它还创建了一个Thread,以便在不同Thread中的所有活动中播放MediaPlayer,这是我的代码:

在我的MainActivity中:

public class MainActivity extends BasedActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    beginBGMusic();
  }
}

在我的BasedActivity中:

public class BasedActivity extends AppCompatActivity {

MediaPlayer BGMusicPlayer;
Thread BGMusic;

@Override
protected void onPause() {
    super.onPause();
}

@Override
protected void onResume() {
    super.onResume();
}

protected void beginBGMusic(){
    BGMusic = new Thread(){

        public void run(){
            BGMusicPlayer = MediaPlayer.create(this,R.raw.music.mp3);
        }
    };

    BGMusic.start();
  }
}

但是,MediaPlayer.create()需要一个上下文,我不明白我应该如何在一个线程中以及另一个类中设置上下文。

有谁知道如何用我的方法解决问题?

谢谢!

1 个答案:

答案 0 :(得分:1)

/**
 * Class MediaManager created on 11/07/16 - 4:01 PM.
 * All copyrights reserved to the Zoomvy.
 * Class behaviour is to initialize and play a media file on notification
 */
public class MediaManager {

    /**
     * SingleTon instance
     */
    private static MediaManager sInstance;

    private Context mContext;


    private MediaManager(Context context) {
       mContext = context.getApplicationContext();
    }

    public static MediaManager getInstance(Context context) {
        if (null == sInstance) {
            synchronized (MediaManager.class) {
                sInstance = new MediaManager(context);
            }
        }
        return sInstance;
    }
}

上面是媒体管理器的单例类,您可以在这里进一步定义媒体播放器参考,它将是您所有活动的单个实例。

但我仍然建议使用服务而不是线程here,你可以找到MediaService的示例。