web-dev-qa-db-ja.com

Androidでストリーミングオーディオをバックグラウンドで再生するにはどうすればよいですか?

MediaPlayerクラスを使用してインターネットからストリーミングされたオーディオを再生するAndroidアプリケーションがあります。

ユーザーがホームボタンを押して他のアプリケーションを実行したときに、バックグラウンドでオーディオを再生し続けるにはどうすればよいですか?

他のアプリを実行している間、オーディオを再生し続けてほしいです。

13
Winston

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

12
Anup Cowkur

再生を開始したアクティビティに関連付けられずにメディアをバックグラウンドで再生するには、サービスを実装する必要があります。 この例 を見てください。

4
Aldryd

キーはdefine 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);

この例の完全なコード。

1
Jorgesys