MediaPlayer
クラスを使用してインターネットからストリーミングされたオーディオを再生するAndroidアプリケーションがあります。
ユーザーがホームボタンを押して他のアプリケーションを実行したときに、バックグラウンドでオーディオを再生し続けるにはどうすればよいですか?
他のアプリを実行している間、オーディオを再生し続けてほしいです。
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
再生を開始したアクティビティに関連付けられずにメディアをバックグラウンドで再生するには、サービスを実装する必要があります。 この例 を見てください。
キーは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);