web-dev-qa-db-ja.com

Androidバックグラウンドミュージックサービス

Androidでエンターテイメントアプリを開発しています。バックグラウンドミュージックを再生したいのですが、そのためにサービスを利用したいです。アプリには3つのアクティビティがあり、すべてのアクティビティで音楽を再生する必要があります。また、アクティビティが一時停止されると、音楽は一時停止し、破棄されると停止する必要があります。誰もこれを行う方法を教えてもらえますか?リンクや例はありますか?

ありがとうございました。

31
Rohit

サービスなしでそれを行う

http://www.rbgrn.net/content/307-light-racer-20-days-61-64-completion

Mediaplayerを使用してservicesでそれを真剣に考えている場合

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

public class BackgroundSoundService extends Service {
    private static final String TAG = null;
    MediaPlayer player;
    public IBinder onBind(Intent arg0) {

        return null;
    }
    @Override
    public void onCreate() {
        super.onCreate();
        player = MediaPlayer.create(this, R.raw.idil);
        player.setLooping(true); // Set looping
        player.setVolume(100,100);

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

    public void onStart(Intent intent, int startId) {
        // TO DO
    }
    public IBinder onUnBind(Intent arg0) {
        // TO DO Auto-generated method
        return null;
    }

    public void onStop() {

    }
    public void onPause() {

    }
    @Override
    public void onDestroy() {
        player.stop();
        player.release();
    }

    @Override
    public void onLowMemory() {

    }
}

マニフェストでこのサービスを呼び出してください.BackgroundSoundService文字列の最後にスペースがないことを確認してください

<service Android:enabled="true" Android:name=".BackgroundSoundService" />
55
Synxmax

パーティーには遅すぎますが、$ 0.02を追加します。Googleはユニバーサルミュージックプレーヤーと呼ばれる無料サンプルをリリースしました。このサンプルを使用すると、すべてのAndroidプラットフォームtv ..)サービスを使用してバックグラウンドで音楽を再生します。非常に便利です。こちらがプロジェクトへのリンクです
https://github.com/googlesamples/Android-UniversalMusicPlayer

9
war_Hero

ServiceクラスとMediaPlayerクラスを使用する場合、@ Synxmaxの答えは正しいですが、これを機能させるには、マニフェストでServiceを宣言する必要があります。

<service
    Android:enabled="true"
    Android:name="com.package.name.BackgroundSoundService" />
8
edwoollard

私はそれを実行するのに問題があり、mp3ソースで実行するためにいくつかの変更を加えました。ここは BackfrounSoundService.Javaファイル。私のmp3ファイルが私の電話の私のSDカードにあると考えてください。

public class BackgroundSoundService extends Service {
    private static final String TAG = null;
    MediaPlayer player;

    public IBinder onBind(Intent arg0) {

        return null;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        Log.d("service", "onCreate");
        player = new MediaPlayer();
        try {
            player.setDataSource(Environment.getExternalStorageDirectory().getAbsolutePath() + "/your file.mp3");
        } catch (IOException e) {
            e.printStackTrace();
        }
        player.setLooping(true); // Set looping
        player.setVolume(100, 100);

    }

    public int onStartCommand(Intent intent, int flags, int startId) {
        Log.d("service", "onStartCommand");
        try {
            player.prepare();
            player.start();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return 1;
    }

    public void onStart(Intent intent, int startId) {
        // TO DO
    }

    public IBinder onUnBind(Intent arg0) {
        // TO DO Auto-generated method
        return null;
    }

    public void onStop() {

    }

    public void onPause() {

    }

    @Override
    public void onDestroy() {
        player.stop();
        player.release();
    }

    @Override
    public void onLowMemory() {

    }
}
4
Mahdi Erfanian

このテーマに関する HelloAndroid に、このテーマに関する優れたチュートリアルがあります。実際、私がグーグルで得た最初のヒットでした。ここで質問する前にグーグルを試してみてください。

4
Jan Dragsbaek

START_STICKYフラグを使用してフォアグラウンドサービスを作成します。

@Override
public int onStartCommand(Intent startIntent, int flags, int startId) {
   if (startIntent != null) {
       String action = startIntent.getAction();
       String command = startIntent.getStringExtra(CMD_NAME);
       if (ACTION_CMD.equals(action)) {
           if (CMD_PAUSE.equals(command)) {
               if (mPlayback != null && mPlayback.isPlaying()) {
                   handlePauseRequest();
               }
           } else if (CMD_PLAY.equals(command)) {
               ArrayList<Track> queue = new ArrayList<>();
               for (Parcelable input : startIntent.getParcelableArrayListExtra(ARG_QUEUE)) {
                   queue.add((Track) Parcels.unwrap(input));
               }
               int index = startIntent.getIntExtra(ARG_INDEX, 0);
               playWithQueue(queue, index);
           }
       }
   }

   return START_STICKY;
}

これは、何らかのアクティビティから音楽を再生するために呼び出すことができます

Intent intent = new Intent(MusicService.ACTION_CMD, fileUrlToPlay, activity, MusicService::class.Java)
intent.putParcelableArrayListExtra(MusicService.ARG_QUEUE, tracks)
intent.putExtra(MusicService.ARG_INDEX, position)
intent.putExtra(MusicService.CMD_NAME, MusicService.CMD_PLAY)
activity.startService(intent)

bindService を使用してサービスにバインドし、対応するアクティビティライフサイクルメソッドからサービスを一時停止/停止できます。

Androidでバックグラウンドで音楽を再生する に関する優れたチュートリアルを次に示します。

2
Sapan Diwakar

共有すべき2つの優れたリソースを見つけました。他の誰かがGoogle経由でこのスレッドに出くわした場合、これが彼らを助けるかもしれません(2018)。 1つは、このビデオチュートリアルです。このチュートリアルでは、サービスの仕組みを実際に確認できます。これは初心者に適しています。

リンク: https://www.youtube.com/watch?v=p2ffzsCqrs8

その他は、バックグラウンドオーディオプレーヤーで本当に役立つこのWebサイトです。

リンク: https://www.dev2qa.com/Android-play-audio-file-in-background-service-example/

がんばろう :)

0
Ayush