Android 根据应用前后台状态播放(或暂停)背景音乐

本文介绍了如何在Android应用中根据应用的前后台状态实现背景音乐的播放和暂停。利用Service在后台播放音乐,并通过注册ActivityLifecycleCallbacks监听应用状态,实现在应用进入后台时暂停音乐,回到前台时恢复播放。这有助于深入理解Service和Activity的生命周期。
摘要由CSDN通过智能技术生成

有时候需要给Android应用添加背景音乐的功能,例如一些小游戏之类的应用。在应用处于前台可见时,需要播放背景音乐,当应用处于后台不可见时(如按了home键或进入其它应用或该应用被销毁时)背景音乐也要随之暂停或停止。

利用Service实现背景音乐播放功能

Service 是一种可在后台执行长时间运行操作而不提供界面的应用组件。服务可由其他应用组件启动,而且即使用户切换到其他应用,服务仍将在后台继续运行。此外,组件可通过绑定到服务与之进行交互,甚至是执行进程间通信 (IPC)。例如,服务可在后台处理网络事务、播放音乐,执行文件 I/O 或与内容提供程序进行交互。

可以通过扩展Service或IntentService来实现服务功能。背景音乐需要在整个应用期间持续播放,停止服务的控制权要交给应用组件,而由于IntentService会在完成任务后自行调用stopSelf()来停止服务,所以不适合此处。这里需要扩展Service来实现功能。



import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.IBinder;
import android.os.Looper;
import android.os.Message;
import android.util.Log;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;


/**
 * BackgroundMusic
 * 后台背景音乐服务(常应用于小游戏),要求
 * 1.应用不可见时(未销毁),播放暂停,服务保持
 * 2.应用恢复可见时,播放继续(不是重新开始)
 * 3.应用退出或被销毁时,服务停止
 */
public class BgmService extends Service {
    public static final String APP_TAG = "SUDOKU_TAG";
    public static final String ACTION_MUSIC_PLAY= "com.jack..action.ACTION_MUSIC_PLAY";
    public static final String ACTION_MUSIC_PAUSE= "com.jack..action.ACTION_MUSIC_PAUSE";
    private MediaPlayer mediaPlayer;
    private volatile Looper mServiceLooper;
    private volatile ServiceHandler mServiceHandler;
    @Nullable
    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }
    private final class ServiceHandler extends Handler{
        private  ServiceHandler(Looper looper){
            super(looper);
        }
        //播放  暂停
        @Override
        public void handleMessage(@NonNull Message msg) {
            Intent intent = (Intent) msg.obj;
            if (ACTION_MUSIC_PLAY.equals(intent.getAction())) {
                i
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值