web-dev-qa-db-ja.com

MediaPlayerサービスAndroid

私はAndroidを初めて使用します。アプリケーションを閉じても曲を再生し続けることができるように、MediaPlayerのサービスを作成しています。 Media Playerのアクティビティを作成しましたが、再生、一時停止、次、前、シークバーなどのすべての機能があり、oncompletionlistenerも含まれています。すべてがうまく機能します。しかし今、私はすべてがサービスによって管理されるべきであることを望みます。

MyServiceクラスを作成しました:

public class MyService extends Service {

    public static MediaPlayer mp;

    @Override
    public IBinder onBind(Intent intent) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        mp = new MediaPlayer();     
    }

    @Override
    public int onStartCommand(Intent intent, int flags, int startId) {  
        return START_STICKY;
    }

しかし、私のプレーヤーアクティビティでは、currentsongIndexを取得するSonglistのArrayListを作成し、それを通じて、next、previous、allなどのすべての機能を維持しています。 ? MediaPlayerオブジェクトをサービスまたはアクティビティのどこで作成する必要がありますか?

mediaPlayerの場合、私は参照しました http://www.androidhive.info/2012/03/Android-building-audio-player-tutorial/ 。私のメディアプレーヤーコードについては、このサイトを参照できます。ありがとう。 Pleazeは私の疑問を解消します。私はとても混乱しています。すぐに返信してください。

13
Zankhna

あなたは正しい方向に進んでいます。 SDKサンプルから適応しました。これは私がそれを行う方法であり、それは素晴らしい働きをします。 ArrayListから(サービスからではなくアクティビティで)呼び出し

onListItemClick

そして、音楽サービスを開始するインテントを開始します。

startService(new Intent(MusicService.ACTION_PLAY));

マニフェストに以下を追加する必要があります。

 <intent-filter>
            <action Android:name="com.blah.blah.action.PLAY" />
           <xxx xxx> 
 </intent-filter>

そしてもちろん、音楽サービスでは、インテントを受け取る必要があります。

public int onStartCommand(Intent intent, int flags, int startId) {
    String action = intent.getAction();
    if (action.equals(ACTION_PLAY))
        processPlayRequest();
  }

スキップ、巻き戻し、停止などのインテントを必ず追加してください。これが役立つかどうか教えてください。

7
Mike Ludwig

アプリをバックグラウンドで実行するには、「サービス」自体で処理する必要があります。
この例に従ってみてください http://www.vogella.com/articles/AndroidServices/article.html
サービスはバックグラウンドで動作するように設計されています。

1
Rahul Bisht

私はまったく同じことを経験しました!本当に素晴らしいmp3プレーヤーアプリでさえ開発するのは長い道のりです。答えは長いです。

これが私を本当に助けてくれたいくつかのリソースです。 Androidは、開発者向けドキュメントにこのことに関する記事があります。

http://developer.Android.com/guide/components/services.html

バインドされたサービスとフォアグラウンドでの実行に関するこの長い記事の下部にある内容に注意してください。

さらに、プレイヤーの状態を管理することが私に最も頭痛の種を引き起こしたものです。

また、新しいサービスを生成してもメインUIスレッドですべてが実行されるため、スレッド化についても確認する必要があります。スレッドプールを管理するためのExecutorServiceを見てください。簡単だったと言えたらいいのにと思います。

残念ながら、私の正式なトレーニングのほとんどはWeb全体からのものですが、Androidサービスは有料サイトからのものです:

http://www.pluralsight.com/training/Courses/TableOfContents/Android-services

これは私が思うすべてのプログラマーにとって良いリソースですが、Androidプログラミングの多くの側面に関するすばらしいセクションがあり、他のチュートリアルサイトでは簡単に説明されています。

上記のように、Vogellaのリソースも優れています。

0
Delton