15

MediaPlayer我有一个 Android 应用程序,它使用该类播放来自 Internet 的流式音频。

当用户点击主页按钮运行其他应用程序时,如何让它继续在后台播放音频?

在运行其他应用程序时,我希望它继续播放音频。

4

3 回答 3

14

你必须使用一种叫做 Android 服务的东西。

从文档:

“服务是一个应用程序组件,代表应用程序希望在不与用户交互的情况下执行更长时间运行的操作,或者为其他应用程序提供功能使用。”

这是使用服务帮助您入门的优秀官方指南:http: //developer.android.com/guide/components/services.html

这是一个关于构建音频播放器的好教程: http ://www.androidhive.info/2012/03/android-building-audio-player-tutorial/

这是构建流媒体音乐播放器的视频教程: http ://www.youtube.com/watch?v=LKL-efbiIAM

于 2012-10-10T15:06:26.610 回答
4

您需要实现一个 Service 以便在后台播放媒体,而不会将其绑定到开始播放的 Activity。看看这个例子

于 2012-10-10T15:08:51.670 回答
1

关键是定义Service.START_STICKY以继续在后台播放:

   public int onStartCommand(Intent intent, int flags, int startId) {
        myMediaPlayer.start();
        return Service.START_STICKY;
    }

Service.START_STICKY:如果该服务的进程在启动时被杀死,系统将尝试重新创建该服务。

这是执行此操作的示例:

import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import android.util.Log;
import android.widget.Toast;

/**
 * Created by jorgesys.
 */

/* Add declaration of this service into the AndroidManifest.xml inside application tag*/

public class BackgroundSoundService extends Service {

    private static final String TAG = "BackgroundSoundService";
    MediaPlayer player;

    public IBinder onBind(Intent arg0) {
        Log.i(TAG, "onBind()" );
        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        player = MediaPlayer.create(this, R.raw.jorgesys_song);
        player.setLooping(true); // Set looping
        player.setVolume(100,100);
        Toast.makeText(this, "Service started...", Toast.LENGTH_SHORT).show();
        Log.i(TAG, "onCreate() , service started...");

    }
    public int onStartCommand(Intent intent, int flags, int startId) {
        player.start();
        return Service.START_STICKY;
    }

    public IBinder onUnBind(Intent arg0) {
        Log.i(TAG, "onUnBind()");
        return null;
    }

    public void onStop() {
        Log.i(TAG, "onStop()");
    }
    public void onPause() {
        Log.i(TAG, "onPause()");
    }
    @Override
    public void onDestroy() {
        player.stop();
        player.release();
        Toast.makeText(this, "Service stopped...", Toast.LENGTH_SHORT).show();
        Log.i(TAG, "onCreate() , service stopped...");
    }

    @Override
    public void onLowMemory() {
        Log.i(TAG, "onLowMemory()");
    }
}

启动服务:

Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class);
startService(myService);

停止服务:

Intent myService = new Intent(MainActivity.this, BackgroundSoundService.class);
stopService(myService);

此示例的完整代码。

于 2017-04-07T20:19:25.503 回答