android Service后台播放音乐

一个简单的Activity

package com.example.day602;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;

public class MainActivity extends AppCompatActivity implements View.OnClickListener{
    private Button start,stop;//开启关闭service
    private Intent serviceIntent;//启动service所需Intent
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        start=(Button)findViewById(R.id.start);
        stop=(Button)findViewById(R.id.stop);

        serviceIntent=new Intent(this,BackgroundAudioService.class);
        start.setOnClickListener(this);
        stop.setOnClickListener(this);
    }

    /**
     * @param v
     * finish()方法表明当前的Service不依赖于Activity,是独立运行的
     */
    @Override
    public void onClick(View v) {
        if (v == start) {
            //点击start后一次调用onCreate()  onStartCommand()
            startService(serviceIntent);
            finish();
        } else if (v == stop) {
            //点击stop后一次调用onDestory()
            stopService(serviceIntent);
            finish();
        }
    }

}



实现的Service

package com.example.day602;

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.net.Uri;
import android.os.Environment;
import android.os.IBinder;

import java.io.File;

public class BackgroundAudioService extends Service implements MediaPlayer.OnCompletionListener{
    private MediaPlayer mediaPlayer;    //处理音频播放的对象
    public BackgroundAudioService() {
    }

    @Override
    public IBinder onBind(Intent intent) {
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        File file=new File(Environment.getExternalStorageDirectory().getPath()+"/Xzq.mp3");//文件所在的路径
        Uri uri = Uri.fromFile(file);
        mediaPlayer=MediaPlayer.create(this,uri);       //创建MediaPlayer对象加载uri
        mediaPlayer.setOnCompletionListener(this);
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {
        //没有播放则开始播放
        if (!mediaPlayer.isPlaying()) {
            mediaPlayer.start();
        }
        return START_STICKY;
    }

    @Override
    public void onDestroy() {
        super.onDestroy();
        //正在播放则停止
        if (mediaPlayer.isPlaying()) {
            mediaPlayer.stop();
        }
        //销毁mediaplayer,释放资源
        mediaPlayer.release();
    }

    /**
     * @param mp
     * 该service实现了OnCompletionListener,并且将Service本身被设置为mediaPlayer对象的该service实现了OnCompletionListener
     * 所以当mediaPlayer播放完毕后,调用onCompletion()
     * 因为只有一首歌所以调用 stopSelf();
     */
    @Override
    public void onCompletion(MediaPlayer mp) {
        stopSelf();
    }
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在 Android Service 中实现后台播放音乐,可以使用 MediaPlayer 类或 ExoPlayer 库。以下是简单的步骤: 1. 创建 Service 类并在 onStartCommand() 方法中初始化 MediaPlayer 或 ExoPlayer。 2. 设置 MediaPlayer 或 ExoPlayer 的数据源和监听器。 3. 调用 MediaPlayer 或 ExoPlayer 的 prepare() 方法。 4. 开始播放音乐。 5. 在 Service 中重写 onDestroy() 方法,停止音乐播放并释放 MediaPlayer 或 ExoPlayer。 6. 在 AndroidManifest.xml 文件中声明 Service。 请注意,为了在后台播放音乐,您需要获取音频焦点,并在失去焦点时暂停音乐播放。您还需要在 Service 中管理通知,以便用户可以在通知栏中控制音乐播放。 以下是一个示例代码片段,用于在 Android Service 中使用 MediaPlayer 播放音乐: ``` public class MusicService extends Service implements MediaPlayer.OnPreparedListener { private MediaPlayer mediaPlayer; @Override public void onCreate() { super.onCreate(); mediaPlayer = new MediaPlayer(); mediaPlayer.setOnPreparedListener(this); try { mediaPlayer.setDataSource("your_audio_file_url"); } catch (IOException e) { e.printStackTrace(); } mediaPlayer.prepareAsync(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { if (!mediaPlayer.isPlaying()) { mediaPlayer.start(); } return START_STICKY; } @Override public void onDestroy() { super.onDestroy(); if (mediaPlayer != null) { mediaPlayer.release(); mediaPlayer = null; } } @Override public void onPrepared(MediaPlayer mp) { mp.start(); } } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值