【问题标题】:Android Background Music安卓背景音乐
【发布时间】:2018-12-29 18:10:20
【问题描述】:

我有一个问题。我看到了这个答案:Background music Android

我不知道这是否是最好的方法, 但问题是:当你改变 Activity 时会发生什么?当你改变你的活动时,你怎么能继续播放背景音乐? 您需要创建一个新的 BackgroundSound 线程吗?

我需要在后台播放音乐,但找不到最佳方式。我认为在每个 Activity 中创建一个 MediaPlayer 并不是最好的方法。

【问题讨论】:

    标签: android android-mediaplayer


    【解决方案1】:

    如果您真的希望在您的应用程序进入后台并且在 Android 屏幕上显示其他内容时播放音乐,那么您可以执行另一个问题的提问者使用的解决方案:启动一个播放音乐的服务.

    如果您希望背景音乐只播放您的应用程序在前台,那么您可以走 AsyncTask 的路线。如果你这样做,那么你只需要一个 AsyncTask。它的生命周期独立于 Activity 生命周期。请记住,onPreExecute 和 onPostExecute 回调将在处理不同 Activity 的 UI 线程上调用。

    请记住,如果您使用 AsyncTask 播放背景音乐,则不能同时运行其他 AsyncTask,因为它们都默认共享同一个后台线程。

    编辑:既然您需要与背景音乐交互,那么您可能应该创建一个服务并使用 Intents 与它进行通信。

    我不会写关于如何制作服务的教程,因为那里已经有很多了。您可以快速搜索并挑选一些东西。

    在该服务内部,您想要创建一个 LocalBroadcastManager。

    myLocalManager = LocalBroadcastManager.getInstance(getApplicationContext());
    

    向它注册一个 BroadcastReceiver 和一个 IntentFilter。

    让 BroadcastReceiver 检查它获取的有关您希望背景音乐做什么的信息的意图,然后执行它。最简单的方法是在 Activity 中添加额外内容,然后在 Service 中取出。

    让 IntentFilter 类似于“my.app.package.BackgroundMusic”以避免名称冲突。

    然后,让您的各种活动获取它们自己的 LocalBroadcastManager 实例,然后调用 sendBroadcast 来告诉服务该做什么。当您构建您的意图时,您希望使用与您用来制作 IntentFilter 的名称相同的名称,以便它会触发您编写的 BroadcastReceiver。

    【讨论】:

    • 谢谢,我只想在应用程序显示时播放背景音乐。但是如何管理对象 AsyncTask 呢?因为在每项活动中我都必须创建其中一项?如果我在第一个活动中创建对象,我如何从其他活动中访问?
    • 让我直截了当地说:您想控制所有活动的背景音乐 (AsyncTask)?您不希望它只是播放背景音乐,而是要控制播放?而且无论你有多少个Activity,整个App只需要一个AsyncTask。
    • 是的,每个活动中的音乐都是一样的,但我需要在每个活动中控制它,例如在停止或暂停应用程序时。我需要上下文,我该怎么做?你能告诉我一些代码吗?一个 AsyncTask 如何管理或访问每个活动?在那个解决方案中,我看不到你什么时候可以暂停音乐,我只看到一个方法 doInBackground。
    • 如果你想和背景音乐交互,那么你应该使用一个Service,你应该使用Intents与Service进行通信。我将为我的答案添加更多上下文。
    猜你喜欢
    • 1970-01-01
    • 2023-03-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-20
    相关资源
    最近更新 更多