【问题标题】:Playing MediaPlayer across all activities在所有活动中播放 MediaPlayer
【发布时间】:2022-03-07 18:03:46
【问题描述】:

我有一个扩展 BaseActivity 的 Activity,其中在 BaseActivity 中它还创建一个线程,以便在不同线程中的所有活动中播放 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() 需要一个上下文,我不明白如果它在线程中并且在不同的类中,我应该如何设置上下文。

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

谢谢!

【问题讨论】:

  • 如果您的要求是在多个活动中使用相同的媒体播放器,那么您应该在服务中创建它,而不是在线程内启动媒体播放器,并且可以跨多个活动访问单个媒体播放器实例。
  • 在线程中创建它是否会破坏让媒体播放器跨活动播放的想法? @Avi
  • 如果你想使用线程,那么创建一个 Singlton 类,这样你就不需要每次都创建线程,因为你在 BaseActivity 中有线程,所以每次启动一个新活动时,新线程都会已创建。
  • 但最好的方法仍然是使用服务而不是线程。
  • 你能给我一个单例类的例子吗?另外,我如何从不同类中的线程中获取上下文?

标签: android multithreading


【解决方案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;
    }
}

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

But still I recommend to use a service instead of a thread.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多